﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using CROSLAND.BL.BE;
using CROSLAND.BL.BC;
using System.Collections.Generic;
using AjaxControlToolkit;
using System.Net.Mail;
using System.IO;
using System.Text;
using DECOR.BL.BE;

namespace CROSLAND.WebApp
{
    public partial class DocVenta : System.Web.UI.Page
    {
        private List<GenericBE> _lvLstCentros = new List<GenericBE>();
        private List<GenericBE> _lvLstAlmacenes = new List<GenericBE>();
        private List<GenericBE> _lvLstLotes = new List<GenericBE>();
        private List<StockBE> _lvLstCAL = new List<StockBE>();
        private string _lvCALSessKey = string.Empty;
        //private readonly string _lvPreCALSessKey = "LstCAL";

        private List<GenericBE> _lvLstPrioridadEnt = new List<GenericBE>();
        private List<GenericBE> _lvLstGrupoMat = new List<GenericBE>();
        private List<GenericBE> _lvLstMotivoRechazo = new List<GenericBE>();
        private ClienteBE _lvObjCliente;
        private PedidoBE _lvObjPedido = new PedidoBE();

        private void limpiaPedido()
        {
            try
            {
                this.limpiarCliente();
                this.limpiarClienteEventual();
                this.limpiarInterlocutores();
                this.limpiarTextos();

                txtCodCliente.Text = "";

                lblMensajeTC.Text = string.Empty;
                txtNroPedCliente.Text = "";
                //txtIgv.Text = "";
                //txtSubtotal.Text = "";
                txtTotal.Text = "";

                cmbCondicionesPago.SelectedValue = "";
                cmbMoneda.SelectedIndex = 0;

                txtCodNuevoMat.Text = "";
                txtDescNuevoMat.Text = "";
                txtCantNuevoMat.Text = "";

                //datos x defecto:
                txtTipoCambio.Text = ParametroBC.Instance.getTipoCambio().ToString();
                txtFecha.Text = DateTime.Now.ToString("dd/MM/yyyy");
                //txtFechaValidez.Text = DateTime.Now.ToString("dd/MM/yyyy");
                txtFechaValidez.Text = Session["fechaHasta"].ToString();

                cgvMateriales.DataSource = new DataTable();
                cgvMateriales.DataBind();

                //limpio los datos de region y poblacion
                GenericBE objBlank = new GenericBE();
                objBlank.Codigo = string.Empty; objBlank.Descripcion = string.Empty;
                List<GenericBE> lst = new List<GenericBE>();
                lst.Add(objBlank);
                if (lst.Count > 0)
                {
                    ddlRegion.DataValueField = "Codigo";
                    ddlRegion.DataTextField = "Descripcion";
                    ddlRegion.DataSource = lst;
                    ddlRegion.DataBind();
                    ddlPoblacion.DataValueField = "Codigo";
                    ddlPoblacion.DataTextField = "Descripcion";
                    ddlPoblacion.DataSource = lst;
                    ddlPoblacion.DataBind();
                }
            }
            catch { }
        }

        private void cargarPedido(string numPedido, string op)
        {
            if (!txtNumPedido.Text.Trim().Equals(""))
            {
                UsuarioWebBE uw = new UsuarioWebBE();
                if (Session["UsuarioWeb"] != null)
                {
                    uw = (UsuarioWebBE)Session["UsuarioWeb"];
                }
                _lvObjPedido = PedidoBC.Instance.leer(numPedido, uw);

                string pTipoDoc = cmbTipoDocumento.SelectedValue;

                Session["Pedido"] = _lvObjPedido;
                //si no existe:
                if (_lvObjPedido == null)
                {
                    Session["Mensaje"] = "No se encontró el Doc de Ventas";
                    Session.Remove("Operacion");
                    this.manejarBotonera();
                }
                else
                {
                    if (_lvObjPedido.Tratado && op == "editar")
                    {
                        Session["Mensaje"] = "El pedido ya ha sido facturado y/o concluido.\r\nNo se puede modificar.";
                        btnGrabar.Enabled = false;
                        btnGrabar.ImageUrl = "~/img/save.dis.png";
                        Session["PedidoTratado"] = true;
                    }
                    //para cargar la info del cliente:
                    if (_lvObjPedido != null && !string.IsNullOrEmpty(_lvObjPedido.CodCliente))
                    {
                        Session["Cliente"] = ClienteBC.Instance.leer(_lvObjPedido.CodCliente, uw);
                        //ClienteBE objCliente = (ClienteBE)Session["Cliente"];
                        this.cargarInterlocutores();
                        this.cargaClienteSesion();
                        //this.cargarInfoCliente();
                    }

                    Session["Operacion"] = op;
                    this.manejarBotonera();

                    switch (op.ToLower())
                    {
                        case "editar":
                            if (_lvObjPedido.Tratado)//falta rescatar valor de pedido
                            {
                                Session["Mensaje"] = "El pedido ya ha sido Facturado, no se puede modificar";
                                Session["PedidoTratado"] = true;
                            }
                            break;
                        case "ver":
                            if (_lvObjPedido.Tratado)
                            {
                                Session["Mensaje"] = "El pedido ya ha sido Facturado.";
                                btnGrabar.Enabled = false;
                                btnGrabar.ImageUrl = "~/img/save.dis.png";
                                Session["PedidoTratado"] = true;
                            }
                            //--- Por defect se deshabilita todas las opiciones.
                            this.deshabilitarVisualizacion(false);
                            break;
                    }

                    Session["Pedido"] = _lvObjPedido;
                    if (_lvObjPedido != null)
                    {
                        Session["MaterialesList"] = _lvObjPedido.Detalle;
                    }
                    this.cargaPedido();
                }
            }
            else
            {
                Session["Mensaje"] = "Debe ingresar el Número de Pedido";
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            this.pagoControl.Aceptar += new ImageClickEventHandler(pagoControl_Aceptar);
            this.btnImprimir.Attributes.Add("onclick", "mostrarImpresion();");
            if (!Page.IsPostBack)
            {
                try
                {
                    this.cargaClienteSesion();
                    this.cargarInterlocutores();
                    this.cargaCombos();

                    //cargamos los valores por defecto del usuario
                    if (Session["UsuarioWeb"] != null)
                    {
                        Session["ddlPoblacion"] = "";
                        UsuarioWebBE objUsW = (UsuarioWebBE)Session["UsuarioWeb"];
                        Label lblOrgV = (Label)this.Master.FindControl("lblOrganizacionVenta");
                        Label lblCanD = (Label)this.Master.FindControl("lblCanal");
                        Label lblOfic = (Label)this.Master.FindControl("lblOficina");
                        if (objUsW.sector == "00")
                        {
                            txtCodVendedor1.ReadOnly = false;
                            txtNomVendedor1.ReadOnly = false;
                            txtFechaValidez.ReadOnly = false;
                            chkRucDNI.Visible = true;
                            //solicitado por Luis Melendez: se automaseleccione la el cod de cotizacion
                            try
                            {
                                cmbTipoDocumento.SelectedValue = "ZC04";
                            }
                            catch (Exception ex)
                            {

                            }
                        }
                        int tipoApp = Convert.ToInt16(ParametroBC.Instance.getParamValue("TipoApp"));
                        if (tipoApp == 0) // 1 = app online // 0 = app offline
                        {
                            btnImpCierre.Visible = false;
                            btnCierreCaja.Visible = false;
                        }

                        if (objUsW.sector == "00")
                        {
                            rblTiposImpresion.Items.RemoveAt(2);
                            rblTiposImpresion.Items.RemoveAt(1);
                        }
                        else
                        {
                            rblTiposImpresion.Items.RemoveAt(0);
                            chkRucDNI.Visible = false;
                        }
                    }
                    this.cargaPedido();
                    this.manejarBotonera();
                    this.textosVisibles();

                    string accion = (Request["accion"] != null) ? Request["accion"] : null;

                    if (accion == "gen")
                    {
                        this.CrearPedidoReferencia();
                    }
                    Session["remove"] = "ok";
                }
                catch (Exception ex)
                {
                    Session["Mensaje"] = ex.Message;
                }
            }
            else
            {
                try
                {
                    cargaPobyReg();
                    this.guardaPedido();
                }
                catch (Exception ex)
                {
                    Session["Mensaje"] = ex.Message;
                }
            }
        }



        protected void CrearPedidoReferencia()
        {
            List<string> lstCodigos = (List<string>)Session["ListaCodigos"];
            List<string> lstmateriales = new List<string>();
            string indReferencia = Session["Referencia"].ToString();
            Session["MaterialesList"] = null;

            this.hfIndReferencia.Value = "S";


            Session["MaterialesList"] = null;
            this.txtNumPedido.Text = Session["PedidoReferencia"].ToString();
            this.cargarPedido(this.txtNumPedido.Text, "editar");

            if (indReferencia == "S")
            {

                PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];

                foreach (GridViewRow dli in cgvMateriales.Rows)
                {
                    HiddenField hidMaterial = (HiddenField)dli.FindControl("hidMaterialId");
                    lstmateriales.Add(hidMaterial.Value);

                }

                pObjPedido.Detalle = null;
                //Session["Pedido"] = pObjPedido;
                //this.buscaPrecios();
                tcMain.ActiveTabIndex = 0;

                foreach (string codigo in lstCodigos)
                {
                    string[] codigos = codigo.Split('$');

                    foreach (string matnr in lstmateriales)
                    {
                        if (codigos[0] == matnr)
                        {
                            decimal cant = 1;
                            string retVal = this.addItem(codigo, cant);

                            if (retVal.Equals(""))
                            {
                                this.buscaPrecios();
                            }
                            else
                            {
                                Session["Mensaje"] = retVal;
                                ((Site)Master).muestraMensajes();
                            }
                            break;
                        }
                    }
                }
                this.hfIndicadorCliente.Value = "N";
            }
            else
            {
                this.Nuevo();
                this.hfIndicadorCliente.Value = "S";
                this.txtNomCliente.Focus();
                Session["Mensaje"] = "Por favor seleccionar el cliente...";
                ((Site)Master).muestraMensajes();
            }

            Session["IndReferencia"] = "S";

            //List<string> lstCodigos = (List<string>)Session["ListaCodigos"];
            //string indReferencia = Session["Referencia"].ToString();
            //Session["MaterialesList"] = null;

            //this.hfIndReferencia.Value = "S";

            //if (indReferencia == "S")
            //{
            //    Session["MaterialesList"] = null;
            //    this.txtNumPedido.Text = Session["PedidoReferencia"].ToString();
            //    this.cargarPedido(this.txtNumPedido.Text, "editar"); 

            //    PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];
            //    foreach (GridViewRow dli in cgvMateriales.Rows)
            //    {
            //        HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
            //        HiddenField hidMaterial = (HiddenField)dli.FindControl("hidMaterialId");

            //        bool flag = true;
            //        bool flagDelete = false;
            //        string codDelete = string.Empty;
            //        foreach (string codigo in lstCodigos)
            //        {
            //            string[] codigos = codigo.Split('$');

            //            if (codigos[0] == hidMaterial.Value)
            //            {
            //                DetalleBE obj = pObjPedido.Detalle.Find(X => X.CodMaterial == hidMaterial.Value);
            //                obj.CodLote = codigos[1];

            //                obj.codstatus = codigos[2];
            //                flag = false;
            //                flagDelete = true;
            //                codDelete = codigo;
            //            }
            //        }

            //        if (flagDelete) lstCodigos.Remove(codDelete);

            //        if (flag)
            //        {
            //            if (hidPosicion != null)
            //            {
            //                DetalleBE obj = pObjPedido.Detalle.Find(X => X.Posicion == hidPosicion.Value);
            //                if (obj != null)
            //                {
            //                    pObjPedido.Detalle.Remove(obj);
            //                    pObjPedido.Detalle.RemoveAll(X => X.PosSup == obj.Posicion);
            //                }
            //            }
            //        }
            //    }

            //    Session["Pedido"] = pObjPedido;
            //    this.buscaPrecios();
            //    tcMain.ActiveTabIndex = 0;

            //    foreach (string codigo in lstCodigos)
            //    {                    
            //        decimal cant = 1;
            //        string retVal = this.addItem(codigo, cant);

            //        if (retVal.Equals(""))
            //        {                        
            //            this.buscaPrecios();
            //        }
            //        else
            //        {                        
            //            Session["Mensaje"] = retVal;
            //            ((Site)Master).muestraMensajes();
            //        }
            //    }
            //    this.hfIndicadorCliente.Value = "N";
            //}
            //else
            //{                
            //    this.Nuevo();
            //    this.hfIndicadorCliente.Value = "S";
            //    this.txtNomCliente.Focus();
            //    Session["Mensaje"] = "Por favor seleccionar el cliente...";               
            //    ((Site)Master).muestraMensajes();               
            //}

            //Session["IndReferencia"] = "S";
        }

        private void cargaClienteSesion()
        {
            if (Session["Cliente"] != null)
            {
                _lvObjCliente = (ClienteBE)Session["Cliente"];
                if (_lvObjCliente.Codigo != null)
                {
                    txtCodCliente.Text = _lvObjCliente.Codigo;
                    txtNomCliente.Text = _lvObjCliente.Descripcion;
                    txtDirCliente.Text = _lvObjCliente.Direccion;
                }
            }
        }

        private void cargaPedido()
        {
            if (Session["Pedido"] != null)
            {
                _lvObjPedido = (PedidoBE)Session["Pedido"];
                //--------------------------------
                if (_lvObjPedido.Sector == "00")
                {
                    chkRucDNI.Checked = Convert.ToString(Session["RUCDNI"]) == "X" ? true : false;
                }
                if (!string.IsNullOrEmpty(_lvObjPedido.NumPedido))
                {
                    txtNumPedido.Text = _lvObjPedido.NumPedido;

                    InterlocutorBE cAG = _lvObjPedido.Interlocutores.Find(X => X.Funcion == "AG");
                    if (cAG.Cliente.Ruc.Length == 11)
                    {
                        chkRucDNI.Checked = false;
                    }
                    else if (cAG.Cliente.Ruc.Length == 8)
                    {
                        chkRucDNI.Checked = true;
                    }

                }
                if (!_lvObjPedido.CodTipoDoc.Equals(string.Empty))
                {
                    try
                    {
                        cmbTipoDocumento.SelectedValue = _lvObjPedido.CodTipoDoc;
                        this.cargarPantallaAnticipo();
                    }
                    catch (ArgumentOutOfRangeException ex)
                    {
                        string err = ex.ToString();
                        Session["Mensaje"] = "La clase de documento del numero de pedido seleccionado no se permite.";
                        throw new ArgumentOutOfRangeException("La clase de documento del numero de pedido seleccionado no se permite.");
                    }
                }
                if (!_lvObjPedido.CondPago.Equals(string.Empty))
                {
                    cmbCondicionesPago.SelectedValue = _lvObjPedido.CondPago;
                }


                bool flag = (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("Anticipo"));

                if (flag) Session["IndAnticipo"] = "S";
                else Session["IndAnticipo"] = "N";

                bool flagCotizacion = (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("DocRepuestos"));
                if (flagCotizacion) Session["IndCotizacion"] = "S";
                else Session["IndCotizacion"] = "N";

                cgvMateriales.DataSource = _lvObjPedido.Detalle;
                cgvMateriales.DataBind();


                cmbMoneda.SelectedValue = _lvObjPedido.Moneda;
                try
                {
                    cmbCondicionesPago.SelectedValue = _lvObjPedido.CondPago;
                }
                catch { }

                txtTipoCambio.Text = _lvObjPedido.TipoCambio.ToString();
                if (_lvObjPedido.LstCond != null)
                {
                    DescuentoBE lstF = _lvObjPedido.LstCond.Find(X => X.Condicion == "ZD05");
                    if (lstF != null)
                    {
                        txtNroPedCliente.Text = Math.Round(Math.Abs(lstF.Importe)).ToString();
                    }
                }

                //txtNroPedCliente.Text = _lvObjPedido.OrdenCompra.ToString();
                txtFecha.Text = _lvObjPedido.FechaString;
                txtFechaValidez.Text = _lvObjPedido.FechaValidezString;
                lblMensajeTC.Text = _lvObjPedido.Moneda == "PEN" ? "" : ParametroBC.Instance.getParamValue("msgWarningTC");

                //txtSubtotal.Text = string.Format("{0:n2}", _lvObjPedido.SubTotal);
                //txtIgv.Text = string.Format("{0:n2}", _lvObjPedido.Igv);
                txtTotal.Text = string.Format("{0:n2}", _lvObjPedido.Total);

                Session["Pedido"] = _lvObjPedido;
                this.cargaTextosSession();
                this.cargaInterlocutoresSession();
            }
        }

        private void guardaPedido()
        {
            try
            {
                _lvObjPedido = Session["Pedido"] != null ? (PedidoBE)Session["Pedido"] : new PedidoBE();
                _lvObjPedido.CodCliente = (Session["Cliente"] != null ? ((ClienteBE)Session["Cliente"]).Codigo : "");
                //guardar pedido:
                if (_lvObjPedido.CodCliente.Equals(string.Empty))
                {
                    _lvObjPedido.CodCliente = txtCodCliente.Text.Trim();
                    ClienteBE objCli = new ClienteBE();
                    objCli.Codigo = txtCodCliente.Text.Trim();
                    objCli.Descripcion = txtNomCliente.Text.Trim();
                    objCli.Direccion = txtDirCliente.Text.Trim();
                }
                //--------------------------------
                _lvObjPedido.ClienteIGV = (Session["Cliente"] != null ? ((ClienteBE)Session["Cliente"]).IGV : "");
                _lvObjPedido.ClienteISC = (Session["Cliente"] != null ? ((ClienteBE)Session["Cliente"]).ISC : "");
                if (Session["RUCDNI"] != null)
                {
                    if (Session["RUCDNI"].ToString().Equals(""))
                    {
                        chkRucDNI.Checked = false;
                    }
                    else
                    {
                        chkRucDNI.Checked = true;
                    }
                }
                //Descuento Gerencia

                //if (txtNroPedCliente.Text != string.Empty)
                //{
                List<DescuentoBE> lstD = new List<DescuentoBE>();
                DescuentoBE dcto = new DescuentoBE();
                lstD = _lvObjPedido.LstCond;
                if (lstD == null)
                {
                    lstD = new List<DescuentoBE>();
                }
                DescuentoBE dctoGerencia = lstD.Find(X => X.Condicion == "ZD05");
                if (dctoGerencia == null)
                {
                    dcto.Condicion = "ZD05";
                    dcto.Importe = 0;
                    dcto.Valor = 0;
                    lstD.Add(dcto);
                    _lvObjPedido.LstCond = lstD;
                }
                else
                {
                    _lvObjPedido.LstCond = lstD;
                }
                //----------------------------------
                if (txtNumPedido.Text != string.Empty) { _lvObjPedido.NumPedido = txtNumPedido.Text; }
                //-----------------------
                _lvObjPedido.CodTipoDoc = cmbTipoDocumento.SelectedValue;
                _lvObjPedido.Moneda = cmbMoneda.SelectedValue;
                _lvObjPedido.CondPago = cmbCondicionesPago.SelectedValue;
                _lvObjPedido.OrdenCompra = txtNroPedCliente.Text;
                _lvObjPedido.TipoCambio = txtTipoCambio.Text == "" ? 0 : Convert.ToDecimal(txtTipoCambio.Text);
                _lvObjPedido.Fecha = Convert.ToDateTime(txtFecha.Text);
                _lvObjPedido.FechaValidez = Convert.ToDateTime(txtFechaValidez.Text);

                //guardando items:
                List<DetalleBE> pListaDetalle = new List<DetalleBE>();
                foreach (GridViewRow dli in cgvMateriales.Rows)
                {
                    DetalleBE pObjDetalleBE = new DetalleBE();

                    HiddenField hidUMedidaRendimiendo = (HiddenField)dli.FindControl("hidUMedidaRendimiendo");
                    HiddenField hidValorRendimiento = (HiddenField)dli.FindControl("hidValorRendimiento");
                    HiddenField hidPeso = (HiddenField)dli.FindControl("hidPeso");
                    HiddenField hidLote = (HiddenField)dli.FindControl("hidLote");
                    HiddenField hidStatus = (HiddenField)dli.FindControl("hidStatus");

                    HiddenField hidMaterialId = (HiddenField)dli.FindControl("hidMaterialId");
                    TextBox lblDescMaterial = (TextBox)dli.FindControl("lblDescMaterial");
                    TextBox txtCantidad = (TextBox)dli.FindControl("txtCantidad");
                    Label lblUMedida = (Label)dli.FindControl("lblUMedida");
                    Label lblPosSup = (Label)dli.FindControl("lblPosSup");

                    //---
                    DropDownList cmbMotivoRechazo = (DropDownList)dli.FindControl("cmbMotivoRechazo");
                    //---
                    HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                    pObjDetalleBE.Posicion = hidPosicion.Value;
                    pObjDetalleBE.CodMaterial = hidMaterialId.Value;
                    pObjDetalleBE.DescMaterial = lblDescMaterial.Text;
                    pObjDetalleBE.CodUMedida = lblUMedida.Text;
                    pObjDetalleBE.CodLote = hidLote.Value;
                    pObjDetalleBE.codstatus = hidStatus.Value;
                    try
                    {
                        pObjDetalleBE.Cantidad = Convert.ToDecimal(txtCantidad.Text);
                    }
                    catch (Exception ex) { Session["Mensaje"] += "- Item " + pObjDetalleBE.Posicion + ": " + ex.Message + "\r\n"; }
                    //--------------------
                    pObjDetalleBE.MotivoRechazo = cmbMotivoRechazo.SelectedValue;

                    //--- material, cantcomp:
                    if (_lvObjPedido != null && _lvObjPedido.Detalle != null)
                    {
                        List<DetalleBE> lstDetalle = _lvObjPedido.Detalle;
                        DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == pObjDetalleBE.Posicion; });

                        pObjDetalleBE.TipoPosAnt = objItem.TipoPosAnt;
                        pObjDetalleBE.Material = objItem.Material;
                        pObjDetalleBE.CantComp = objItem.CantComp;
                        pObjDetalleBE.Repartos = objItem.Repartos;
                        pObjDetalleBE.LstCond = objItem.LstCond;
                    }
                    LinkButton lnkDctoTotal = (LinkButton)dli.FindControl("lnkDctoTotal");
                    //------------------------------------------
                    Label lblPrecio = (Label)dli.FindControl("lblPrecio");
                    Label lblPrecioUnitario = (Label)dli.FindControl("lblPrecioUnitario");
                    //--- igv
                    Label lblIgvUnitario = (Label)dli.FindControl("lblIgvUnitario");
                    Label lblIgvTotal = (Label)dli.FindControl("lblIgvTotal");
                    //--- dctos
                    Label lblTotalDctos = (Label)dli.FindControl("lblTotalDctos");
                    DescuentoBE objPrecio = new DescuentoBE();
                    objPrecio.Condicion = ParametroBC.Instance.getParamValue("CondPrecio");
                    if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("Anticipo"))
                    {
                        TextBox txtPre = (TextBox)dli.FindControl("txtPrecio");
                        objPrecio.Importe = lblPrecioUnitario.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtPre.Text);
                        objPrecio.Valor = lblPrecioUnitario.Text == string.Empty ? 0.00m : Convert.ToDecimal(txtPre.Text);
                    }
                    else
                    {
                        objPrecio.Importe = lblPrecioUnitario.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblPrecioUnitario.Text);
                        objPrecio.Valor = lblPrecio.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblPrecio.Text);
                    }

                    //DescuentoBE objIgv = new DescuentoBE();
                    //objIgv.Condicion = ParametroBC.Instance.getParamValue("CondIgv");
                    //objIgv.Importe = lblIgvUnitario.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblIgvUnitario.Text);
                    //objIgv.Valor = lblIgvTotal.Text == string.Empty ? 0.00m : Convert.ToDecimal(lblIgvTotal.Text);

                    pObjDetalleBE.Precio = objPrecio;
                    //pObjDetalleBE.Igv = objIgv;
                    DetalleBE objDet = _lvObjPedido.Detalle.Find(X => X.Posicion == pObjDetalleBE.Posicion);
                    if (objDet.color != null && objDet.color != string.Empty)
                    {
                        pObjDetalleBE.color = objDet.color;
                    }
                    if (objDet.anniofab != null && objDet.anniofab != string.Empty)
                    {
                        pObjDetalleBE.anniofab = objDet.anniofab;
                    }
                    if (objDet.anniomod != null && objDet.anniomod != string.Empty)
                    {
                        pObjDetalleBE.anniomod = objDet.anniomod;
                    }
                    TextoBE lstPos7 = objDet.Textos.Find(X => X.CodTexto == "ZC07");
                    if (lstPos7 != null)
                    {
                        pObjDetalleBE.Textos.Add(lstPos7);
                    }
                    TextoBE lstPos9 = objDet.Textos.Find(X => X.CodTexto == "ZC09");
                    if (lstPos9 != null)
                    {
                        pObjDetalleBE.Textos.Add(lstPos9);
                    }
                    pListaDetalle.Add(pObjDetalleBE);
                }
                _lvObjPedido.Detalle = pListaDetalle;
                Session["MaterialesList"] = _lvObjPedido.Detalle;
                Session["Pedido"] = _lvObjPedido;
                this.guardaInterlocutores();
                this.guardaTextos();
            }
            catch { }
        }

        private void guardaTextos()
        {
            List<TextoBE> lstTextos = new List<TextoBE>();
            _lvObjPedido = (PedidoBE)Session["Pedido"];

            if (Session["UsuarioWeb"] != null)
            {
                UsuarioWebBE objUsW = (UsuarioWebBE)Session["UsuarioWeb"];
                if (objUsW.sector == "00")
                {
                    if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("DocRepuestos"))
                    {
                        TextoBE objTextoGerencia = new TextoBE();
                        objTextoGerencia.CodTexto = ParametroBC.Instance.getParamValue("TextoGerencia");
                        objTextoGerencia.Descripcion = txtTextoGerencia.Text;

                        lstTextos.Add(objTextoGerencia);
                    }
                    else
                    {
                        TextoBE objTextoAnticipo = new TextoBE();
                        objTextoAnticipo.CodTexto = ParametroBC.Instance.getParamValue("TextoAnticipo");
                        objTextoAnticipo.Descripcion = txtTextoAnticipo.Text;

                        lstTextos.Add(objTextoAnticipo);
                    }
                }
                else
                {
                    if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("CotVMS"))
                    {
                        TextoBE objTextoReferencia = new TextoBE();
                        objTextoReferencia.CodTexto = ParametroBC.Instance.getParamValue("TextoReferencia");
                        objTextoReferencia.Descripcion = txtTextoReferencia.Text;

                        lstTextos.Add(objTextoReferencia);

                        TextoBE objTextoObservaciones = new TextoBE();
                        objTextoObservaciones.CodTexto = ParametroBC.Instance.getParamValue("TextoObservaciones");
                        objTextoObservaciones.Descripcion = txtTextoObservaciones.Text;

                        lstTextos.Add(objTextoObservaciones);

                        TextoBE objTextoGlosa = new TextoBE();
                        objTextoGlosa.CodTexto = ParametroBC.Instance.getParamValue("TextoGlosa");
                        objTextoGlosa.Descripcion = txtTextoGlosa.Text;

                        lstTextos.Add(objTextoGlosa);

                        TextoBE objTextoAprobacion = new TextoBE();
                        objTextoAprobacion.CodTexto = ParametroBC.Instance.getParamValue("TextoAprob");
                        objTextoAprobacion.Descripcion = txtTextoAprob.Text;

                        lstTextos.Add(objTextoAprobacion);
                    }
                    else
                    {
                        TextoBE objTextoAnticipo = new TextoBE();
                        objTextoAnticipo.CodTexto = ParametroBC.Instance.getParamValue("TextoAnticipo");
                        objTextoAnticipo.Descripcion = txtTextoAnticipo.Text;

                        lstTextos.Add(objTextoAnticipo);
                    }
                }
            }
            Session["Textos"] = lstTextos;
            _lvObjPedido.Textos = lstTextos;
            Session["Pedido"] = _lvObjPedido;
        }

        private void cargaTextosSession()
        {
            if (Session["Pedido"] != null)
            {
                PedidoBE objTmpPed = (PedidoBE)Session["Pedido"];
                if (objTmpPed.Textos != null)
                {
                    TextoBE objTextoReferencia = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoReferencia")); });
                    if (objTextoReferencia != null) { txtTextoReferencia.Text = objTextoReferencia.Descripcion; }

                    TextoBE objTextoObservaciones = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoObservaciones")); });
                    if (objTextoObservaciones != null) { txtTextoObservaciones.Text = objTextoObservaciones.Descripcion; }

                    TextoBE objTextoGlosa = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoGlosa")); });
                    if (objTextoGlosa != null) { txtTextoGlosa.Text = objTextoGlosa.Descripcion; }

                    TextoBE objTextoAprobMostrador = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoAprob")); });
                    if (objTextoAprobMostrador != null) { txtTextoAprob.Text = objTextoAprobMostrador.Descripcion; }

                    TextoBE objTextoAnticipo = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoAnticipo")); });
                    if (objTextoAnticipo != null) { txtTextoAnticipo.Text = objTextoAnticipo.Descripcion; }

                    TextoBE objTextoGerencia = objTmpPed.Textos.Find(delegate(TextoBE txts) { return (txts.CodTexto == ParametroBC.Instance.getParamValue("TextoGerencia")); });
                    if (objTextoGerencia != null) { txtTextoGerencia.Text = objTextoGerencia.Descripcion; }
                }
            }
        }

        private void cargaInterlocutoresSession()
        {
            if (Session["Pedido"] != null)
            {
                PedidoBE objTmpPed = (PedidoBE)Session["Pedido"];
                if (objTmpPed.Interlocutores != null)
                {
                    // cargar data
                    //-- solicitante AG
                    InterlocutorBE objSolicitante = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocCliente")); });
                    if (objSolicitante != null)
                    {
                        if (objSolicitante.Cliente != null)
                        {
                            txtCodSolicitante.Text = objSolicitante.Cliente.Codigo;
                            txtNomSolicitante.Text = objSolicitante.Cliente.Descripcion;
                            txtDirSolicitante.Text = objSolicitante.Cliente.Direccion;
                            txtTelSolicitante.Text = objSolicitante.Cliente.Telefono;
                            txtNifSolicitante.Text = objSolicitante.Cliente.Ruc;
                        }
                    }
                    //-- solicitante WE
                    InterlocutorBE objDestMercaderia = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocDestMerc")); });
                    if (objDestMercaderia != null)
                    {
                        if (objDestMercaderia.Cliente != null)
                        {
                            txtCodDestMerc.Text = objDestMercaderia.Cliente.Codigo;
                            txtNomDestMerc.Text = objDestMercaderia.Cliente.Descripcion;
                            txtDirDestMerc.Text = objDestMercaderia.Cliente.Direccion;
                            txtTelDestMerc.Text = objDestMercaderia.Cliente.Telefono;
                        }
                    }
                    //-- solicitante RE
                    InterlocutorBE objDestFactura = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocDestFact")); });
                    if (objDestFactura != null)
                    {
                        if (objDestFactura.Cliente != null)
                        {
                            txtCodDestFact.Text = objDestFactura.Cliente.Codigo;
                            txtNomDestFact.Text = objDestFactura.Cliente.Descripcion;
                            txtDirDestFact.Text = objDestFactura.Cliente.Direccion;
                            txtTelDestFact.Text = objDestFactura.Cliente.Telefono;
                        }
                    }
                    //-- solicitante RG
                    InterlocutorBE objResPago = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocResPago")); });
                    if (objResPago != null)
                    {
                        if (objResPago.Cliente != null)
                        {
                            txtCodResPago.Text = objResPago.Cliente.Codigo;
                            txtNomResPago.Text = objResPago.Cliente.Descripcion;
                            txtDirResPago.Text = objResPago.Cliente.Direccion;
                            txtTelResPago.Text = objResPago.Cliente.Telefono;
                            txtNifResPago.Text = objResPago.Cliente.Ruc;
                        }
                    }

                    //-- encargado comercial VE
                    UsuarioWebBE uWeb = new UsuarioWebBE();
                    uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                    txtCodVendedor1.Text = uWeb.PerNr;
                    txtNomVendedor1.Text = uWeb.Descripcion;

                    InterlocutorBE objEncargadoComercial = objTmpPed.Interlocutores.Find(delegate(InterlocutorBE ilctr) { return (ilctr.Funcion == ParametroBC.Instance.getParamValue("IlocVendedor1")); });
                    if (objEncargadoComercial != null)
                    {
                        if (objEncargadoComercial.Persona != null)
                        {
                            txtCodVendedor1.Text = objEncargadoComercial.Persona.CodPersona;
                            txtNomVendedor1.Text = objEncargadoComercial.Persona.Descripcion;
                        }
                    }
                }
            }
        }

        private void copiaClienteEventual()
        {
            this.copiarClienteEventual();
        }

        private void guardaInterlocutores()
        {
            List<InterlocutorBE> lstInterlocutores = new List<InterlocutorBE>();

            InterlocutorBE objSolicitante = new InterlocutorBE();
            objSolicitante.Funcion = ParametroBC.Instance.getParamValue("IlocCliente");
            objSolicitante.Cliente.Codigo = txtCodSolicitante.Text; //txtCodCliente.Text;
            objSolicitante.Cliente.Descripcion = txtNomSolicitante.Text; //txtNomCliente.Text;
            objSolicitante.Cliente.Direccion = txtDirSolicitante.Text; //txtDirCliente.Text;
            objSolicitante.Cliente.Telefono = txtTelSolicitante.Text;
            objSolicitante.Cliente.Ruc = txtNifSolicitante.Text;
            if (objSolicitante.Cliente.Codigo == ParametroBC.Instance.getParamValue("CodEventual"))
            {
                objSolicitante.Cliente.Eventual = true;
            }
            lstInterlocutores.Add(objSolicitante);

            InterlocutorBE objDestMercaderia = new InterlocutorBE();
            objDestMercaderia.Funcion = ParametroBC.Instance.getParamValue("IlocDestMerc");
            objDestMercaderia.Cliente.Codigo = txtCodDestMerc.Text;
            objDestMercaderia.Cliente.Descripcion = txtNomDestMerc.Text;
            objDestMercaderia.Cliente.Direccion = txtDirDestMerc.Text;
            objDestMercaderia.Cliente.Telefono = txtTelDestMerc.Text;
            lstInterlocutores.Add(objDestMercaderia);

            InterlocutorBE objDestFactura = new InterlocutorBE();
            objDestFactura.Funcion = ParametroBC.Instance.getParamValue("IlocDestFact");
            objDestFactura.Cliente.Codigo = txtCodDestFact.Text;
            objDestFactura.Cliente.Descripcion = txtNomDestFact.Text;
            objDestFactura.Cliente.Direccion = txtDirDestFact.Text;
            objDestFactura.Cliente.Telefono = txtTelDestFact.Text;
            lstInterlocutores.Add(objDestFactura);

            InterlocutorBE objResPago = new InterlocutorBE();
            objResPago.Funcion = ParametroBC.Instance.getParamValue("IlocResPago");
            objResPago.Cliente.Codigo = txtCodResPago.Text;
            objResPago.Cliente.Descripcion = txtNomResPago.Text;
            objResPago.Cliente.Direccion = txtDirResPago.Text;
            objResPago.Cliente.Telefono = txtTelResPago.Text;
            objResPago.Cliente.Ruc = txtNifResPago.Text;
            objResPago.Region = ddlRegion.SelectedValue;
            objResPago.Poblacion = ddlPoblacion.SelectedValue;
            lstInterlocutores.Add(objResPago);

            InterlocutorBE objEncargadoComercial = new InterlocutorBE();
            objEncargadoComercial.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor1");
            objEncargadoComercial.Persona.CodPersona = txtCodVendedor1.Text;
            objEncargadoComercial.Persona.Descripcion = txtNomVendedor1.Text;
            lstInterlocutores.Add(objEncargadoComercial);

            //-- interlocutores nuevos
            InterlocutorBE objInteloc = new InterlocutorBE();
            objInteloc.Funcion = ParametroBC.Instance.getParamValue("IlocEntFinan");
            objInteloc.Cliente.Codigo = txtCodEntFinanciera.Text.Trim();
            objInteloc.Cliente.Descripcion = txtNomEntFinanciera.Text.Trim();
            lstInterlocutores.Add(objInteloc);

            objInteloc = new InterlocutorBE();
            objInteloc.Funcion = ParametroBC.Instance.getParamValue("IlocGrpEmp");
            objInteloc.Cliente.Codigo = txtCodGpoEmp.Text.Trim();
            objInteloc.Cliente.Descripcion = txtNomGpoEmp.Text.Trim();
            lstInterlocutores.Add(objInteloc);

            objInteloc = new InterlocutorBE();
            objInteloc.Funcion = ParametroBC.Instance.getParamValue("IlocInst");
            objInteloc.Cliente.Codigo = txtCodInstitucion.Text.Trim();
            objInteloc.Cliente.Descripcion = txtNomInstitucion.Text.Trim();
            lstInterlocutores.Add(objInteloc);
            //----

            Session["Interlocutores"] = lstInterlocutores;
            _lvObjPedido = (PedidoBE)Session["Pedido"];
            _lvObjPedido.Interlocutores = lstInterlocutores;
            Session["Pedido"] = _lvObjPedido;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaEntFin(string prefixText, int count)
        {
            string[] retVal;
            UsuarioWebBE uWeb = new UsuarioWebBE();
            uWeb = (UsuarioWebBE)HttpContext.Current.Session["UsuarioWeb"];
            List<ClienteBE> lstClientes = ClienteBC.Instance.buscarEntFin("", prefixText, uWeb);
            HttpContext.Current.Session["lstClientes"] = lstClientes;
            List<string> lst = new List<string>();
            int total = lstClientes.Count < count ? lstClientes.Count : count;
            for (int i = 0; i < total; i++)
            {
                String item = String.Empty;
                item = lstClientes[i].Descripcion;
                item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(item, lstClientes[i].Codigo);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaVendedor(string prefixText, int count)
        {
            string[] retVal;
            UsuarioWebBE uWeb = new UsuarioWebBE();
            uWeb = (UsuarioWebBE)HttpContext.Current.Session["UsuarioWeb"];
            DateTime fecha = DateTime.Now;
            List<GenericBE> lstVendedor = ClienteBC.Instance.buscaVendedor(prefixText, "", uWeb.OfVentas, fecha);
            HttpContext.Current.Session["lstVendedor"] = lstVendedor;
            List<string> lst = new List<string>();
            int total = lstVendedor.Count < count ? lstVendedor.Count : count;
            for (int i = 0; i < total; i++)
            {
                String item = String.Empty;
                item = lstVendedor[i].Descripcion;
                item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(item, lstVendedor[i].Codigo);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaClientes(string prefixText, int count)
        {
            string[] retVal;
            UsuarioWebBE uWeb = new UsuarioWebBE();
            uWeb = (UsuarioWebBE)HttpContext.Current.Session["UsuarioWeb"];
            List<ClienteBE> lstClientes = null;
            string tipoapp = "";
            tipoapp = ParametroBC.Instance.getParamValue("TipoApp");
            if (tipoapp == "0" && uWeb.sector == "00")
            {
                tipoapp = ParametroBC.Instance.getParamValue("CodEventual");
                lstClientes = ClienteBC.Instance.buscarCliente(tipoapp, prefixText, uWeb);
            }
            else
            {
                lstClientes = ClienteBC.Instance.buscarCliente("", prefixText, uWeb);
            }
            HttpContext.Current.Session["tipoapp"] = tipoapp;
            HttpContext.Current.Session["lstClientes"] = lstClientes;
            List<string> lst = new List<string>();
            int total = lstClientes.Count < count ? lstClientes.Count : count;
            for (int i = 0; i < total; i++)
            {
                String item = String.Empty;
                item = lstClientes[i].Descripcion;
                item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(item, lstClientes[i].Codigo);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] buscaMateriales(string prefixText, int count)
        {
            string[] retVal = null;
            UsuarioWebBE uWeb = new UsuarioWebBE();
            uWeb = (UsuarioWebBE)HttpContext.Current.Session["UsuarioWeb"];
            List<MaterialBE> lstMateriales = MaterialBC.Instance.buscarMateriales(prefixText, "", uWeb.OrgVentas, uWeb.CanalDist, "", uWeb.Usuario, uWeb.sector, uWeb.centro, uWeb.almacen);
            List<string> lst = new List<string>();
            int total = lstMateriales.Count < count ? lstMateriales.Count : count;
            for (int i = 0; i < total; i++)
            {
                string item = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(lstMateriales[i].DescMaterial, lstMateriales[i].CodMaterialCorto);
                lst.Add(item);
            }
            retVal = lst.ToArray();
            return retVal;
        }

        private List<GenericBE> getGenericBE(ParametroWS.GenericBE[] p)
        {
            List<GenericBE> g = new List<GenericBE>();
            try
            {
                foreach (ParametroWS.GenericBE i in p)
                {
                    GenericBE n = new GenericBE();
                    n.Codigo = i.Codigo;
                    n.Descripcion = i.Descripcion;
                    g.Add(n);
                }
            }
            catch
            {
                g = null;
            }
            return g;
        }

        private void cargaCombos()
        {
            txtTipoCambio.Text = ParametroBC.Instance.getTipoCambio().ToString();
            txtFecha.Text = DateTime.Today.ToString("dd/MM/yyyy");

            List<GenericBE> lstOficinas = new List<GenericBE>();
            List<GenericBE> lstCodigoPostal = new List<GenericBE>();
            List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            List<GenericBE> lstGrupoVendedores = new List<GenericBE>();
            List<GenericBE> lstSectores = new List<GenericBE>();
            List<GenericBE> lstMotivos = new List<GenericBE>();
            List<GenericBE> lstGrupoCond = new List<GenericBE>();
            List<GenericBE> lstBloqueoEntrega = new List<GenericBE>();
            List<GenericBE> lstBloqueoFactura = new List<GenericBE>();
            List<GenericBE> lstVendedores = new List<GenericBE>();
            List<GenericBE> lstTipoVisita = new List<GenericBE>();
            List<GenericBE> lstCondicionPago = new List<GenericBE>();
            List<GenericBE> lstAlmacen = new List<GenericBE>();
            List<GenericBE> lstAsesores = new List<GenericBE>();
            List<GenericBE> lstCondExp = new List<GenericBE>();
            List<GenericBE> lstCanal = new List<GenericBE>();
            List<GenericBE> lstOrgVta = new List<GenericBE>();
            List<GenericBE> lstMotRec = new List<GenericBE>();
            List<GenericBE> lstZonaReg = new List<GenericBE>();
            List<GenericBE> lstGrupoCli = new List<GenericBE>();
            List<GenericBE> lstCampaña = new List<GenericBE>();
            List<GenericBE> lstCity = new List<GenericBE>();
            List<GenericBE> lstColor = new List<GenericBE>();
            List<GenericBE> lstGrpArt = new List<GenericBE>();
            List<GenericBE> lstZReg = new List<GenericBE>();
            List<GenericBE> lstDispo = new List<GenericBE>();
            List<UbigeoBE> lstUbigeos = new List<UbigeoBE>();
            List<GenericBE> lstBancoCheque = new List<GenericBE>();
            List<GenericBE> ltsBancoDepo = new List<GenericBE>();
            List<GenericBE> lstProcesadora = new List<GenericBE>();
            List<LibrosxvstelBE> lstLibrosxvstel = new List<LibrosxvstelBE>();
            DateTime fecHasta = new DateTime();
            decimal pIGV;
            //adicionado para llamar al negocio
            if (Session["CargarCombos"] == null)
            {
                ParametroBC.Instance.getDataDDL(ref lstAlmacen, ref lstAsesores,
                ref lstBloqueoEntrega, ref lstBloqueoFactura, ref lstCanal, ref lstCondExp, ref lstCondicionPago,
                ref lstGrupoCond, ref lstGrupoVendedores, ref lstMotivos, ref lstOficinas, ref lstOrgVta, ref lstSectores,
                ref lstTipoDocumento, out fecHasta, ref lstMotRec, ref lstZonaReg, ref lstGrupoCli, ref lstUbigeos, ref lstCampaña,
                ref lstCity, ref lstColor, ref lstDispo, ref lstGrpArt, ref lstZReg,
                ref lstBancoCheque, ref ltsBancoDepo, ref lstProcesadora, ref lstLibrosxvstel, out pIGV);
                Dictionary<string, List<GenericBE>> lstCombos = new Dictionary<string, List<GenericBE>>();

                lstCombos.Add("sectores", lstSectores);
                UsuarioWebBE uw = new UsuarioWebBE();
                string doc = "";
                uw = (UsuarioWebBE)Session["UsuarioWeb"];
                if (uw.sector == "00")
                {
                    for (int i = 0; i <= 1; i++)
                    {
                        doc = "CotVMS";
                        if (i > 0)
                        { doc = "CotVMS" + i.ToString(); }
                        GenericBE itm = lstTipoDocumento.Find(X => X.Codigo == ParametroBC.Instance.getParamValue(doc));
                        lstTipoDocumento.Remove(itm);
                    }
                }
                else
                {
                    //GenericBE itm = lstTipoDocumento.Find(X => X.Codigo == ParametroBC.Instance.getParamValue("DocRepuestos"));
                    //lstTipoDocumento.Remove(itm);
                    for (int i = 0; i <= 1; i++)
                    {
                        doc = "DocRepuestos";
                        if (i > 0)
                        { doc = "DocRepuestos" + i.ToString(); }
                        GenericBE itm = lstTipoDocumento.Find(X => X.Codigo == ParametroBC.Instance.getParamValue(doc));
                        lstTipoDocumento.Remove(itm);
                    }
                    //for (int i = lstTipoDocumento.Count - 1; i >= 0; i--)
                    //{
                    //    if (lstTipoDocumento[i].Codigo == "ZC01")
                    //    {
                    //        lstTipoDocumento.Remove(lstTipoDocumento[i]);
                    //    }
                    //}
                }
                lstCombos.Add("tipoDocumento", lstTipoDocumento);
                lstCombos.Add("condicionPago", lstCondicionPago);
                lstCombos.Add("canal", lstCanal);
                lstCombos.Add("orgvta", lstOrgVta);
                lstCombos.Add("motivoRechazo", lstMotRec);
                lstCombos.Add("zonaregistral", lstZReg);
                lstCombos.Add("grupocliente", lstGrupoCli);
                lstCombos.Add("campañas", lstCampaña);
                lstCombos.Add("poblacion", lstCity);
                lstCombos.Add("color", lstColor);
                lstCombos.Add("disponibilidad", lstDispo);
                lstCombos.Add("grpArt", lstGrpArt);
                lstCombos.Add("BancoCheque", lstBancoCheque);
                lstCombos.Add("BancoDepo", ltsBancoDepo);
                lstCombos.Add("Procesadora", lstProcesadora);
                Session["CargarCombos"] = lstCombos;
                Session["Ubigeos"] = lstUbigeos;
                Session["fechaHasta"] = fecHasta;
                Session["librosxvstel"] = lstLibrosxvstel;
                txtFechaValidez.Text = fecHasta.ToString("dd/MM/yyyy");
            }

            Dictionary<string, List<GenericBE>> dict = (Dictionary<string, List<GenericBE>>)Session["CargarCombos"];


            cmbTipoDocumento.DataValueField = "Codigo";
            cmbTipoDocumento.DataTextField = "Descripcion";
            cmbTipoDocumento.DataSource = dict["tipoDocumento"].ToList();
            cmbTipoDocumento.DataBind();

            this.cargarPantallaAnticipo();

            cmbCondicionesPago.DataValueField = "Codigo";
            cmbCondicionesPago.DataTextField = "Descripcion";
            cmbCondicionesPago.DataSource = dict["condicionPago"].ToList();
            cmbCondicionesPago.DataBind();
            cmbCondicionesPago.SelectedValue = "";

            /******** moneda ********/
            cmbMoneda.Items.Add("PEN"); cmbMoneda.Items.Add("USD");
            cmbMoneda.SelectedIndex = 0;
            /************************/
            List<GenericBE> lstRegion = new List<GenericBE>();
            List<DECOR.BL.BE.PoblacionBE> lstPoblacion = new List<DECOR.BL.BE.PoblacionBE>();
            if (Session["lstRegion"] == null)
            {


                ParametroBC.Instance.getDatosUbicación(out lstRegion, out lstPoblacion);


                Session["lstRegion"] = lstRegion;
                Session["lstPoblacion"] = lstPoblacion;

                ddlRegion.DataValueField = "Codigo";
                ddlRegion.DataTextField = "Descripcion";
                ddlRegion.DataSource = lstRegion;
                ddlRegion.DataBind();

                ddlPoblacion.DataValueField = "Codigo";
                ddlPoblacion.DataTextField = "Descripcion";
                ddlPoblacion.DataSource = getPobXreg(ddlRegion.SelectedValue);
                ddlPoblacion.DataBind();
            }
            else { cargaPobyReg(); }

        }
        private void cargaPobyReg()
        {
            List<GenericBE>  lstRegion = new List<GenericBE>();
            List<DECOR.BL.BE.PoblacionBE> lstPoblacion = new List<DECOR.BL.BE.PoblacionBE>();
            if (Session["lstRegion"] != null)
            {
                lstRegion = (List<GenericBE>)Session["lstRegion"];
                lstPoblacion = (List<DECOR.BL.BE.PoblacionBE>)Session["lstPoblacion"];
                string val1 = "";
                string val2 = "";
                string op = "";
                String pob = "";
                try
                {
                    if (Session["Operacion"] != null)
                    {
                        op = Session["Operacion"].ToString();
                    }
                    if (Session["ddlPoblacion"] != null)
                    {
                        if (!ddlPoblacion.SelectedValue.Equals((String)Session["ddlPoblacion"]))
                        {
                            Session["ddlPoblacion"] = ddlPoblacion.SelectedValue;
                            
                        }
                        pob = (String)Session["ddlPoblacion"];
                        

                    }
                        //_lvObjPedido = (PedidoBE)Session["Pedido"];
                    if (_lvObjPedido != null)
                    {
                        if (_lvObjPedido.Interlocutores != null)
                        {
                            InterlocutorBE cRG = _lvObjPedido.Interlocutores.Find(X => X.Funcion == "RG");
                            if (cRG.Region != null)
                            {
                                val1 = cRG.Region;
                            }
                            if (cRG.Poblacion != null)
                            {
                                val2 = cRG.Poblacion;
                            }
                        }
                    }

                }
                catch (Exception ex)
                {
                }

                ddlRegion.DataValueField = "Codigo";
                ddlRegion.DataTextField = "Descripcion";
                ddlRegion.DataSource = lstRegion;
                if (val1 != "" )//&& ddlRegion.SelectedValue == "")
                {
                    ddlRegion.SelectedValue = val1;
                }
                if (ddlRegion.SelectedValue == "")
                {
                    ddlRegion.DataBind();
                }
                if (op != null)
                {
                    if (op.Equals("crear"))
                    {
                        val1 = ddlRegion.SelectedValue;
                    }
                }
                if (val1 != "")
                {
                  //  string idPob = "";
                    ddlPoblacion.DataValueField = "Codigo";
                    ddlPoblacion.DataTextField = "Descripcion";
                    ddlPoblacion.DataSource = getPobXreg(val1);
                    if (val2 != "")
                    {
                        ddlPoblacion.DataBind();  
                        ddlPoblacion.SelectedValue = getIDPob(val1, val2);                      
                    }
                    if (pob != "")
                    {
                        ddlPoblacion.DataBind();
                        try
                        {
                            ddlPoblacion.SelectedValue = pob;
                        }
                        catch
                        { 
                        
                        }
                    }else if (pob.Equals(""))
                    {
                        ddlPoblacion.DataBind();
                    
                    }
                }
            }
            else {
                if (Session["lstRegion"] == null)
                {
                    ParametroBC.Instance.getDatosUbicación(out lstRegion, out lstPoblacion);

                    ddlRegion.DataValueField = "Codigo";
                    ddlRegion.DataTextField = "Descripcion";
                    ddlRegion.DataSource = lstRegion;
                    ddlRegion.DataBind();

                    Session["lstRegion"] = lstRegion;
                    Session["lstPoblacion"] = lstPoblacion;


                    ddlPoblacion.DataValueField = "Codigo";
                    ddlPoblacion.DataTextField = "Descripcion";
                    ddlPoblacion.DataSource = getPobXreg(ddlRegion.SelectedValue);
                    ddlPoblacion.DataBind();
                }
            }
        }


        private void cargaMateriales()
        {
            List<DetalleBE> lstMateriales;
            lstMateriales = (Session["MaterialesList"] == null) ? null : (List<DetalleBE>)Session["MaterialesList"];

            if (Session["Pedido"] != null)
            {
                _lvObjPedido = (PedidoBE)Session["Pedido"];
            }
            else
            {
                this.guardaPedido();
            }
            //lstMateriales = new List<DetalleBE>();
            if (lstMateriales != null)
            {
                _lvObjPedido.Detalle = lstMateriales;
            }
            Session["Pedido"] = _lvObjPedido;
        }

        //modificado
        protected void cgvMateriales_RowCreated(object sender, GridViewRowEventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            this.EnsureTblRepartos();
            //foreach (GridViewRow row in cgvMateriales.Rows)
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //HiddenField hidPosicion = (HiddenField)e.Row.FindControl("hidPosicion");
                //string posActual = hidPosicion.Value.PadLeft(6, '0');

                //List<DetalleBE> lstDetalle = new List<DetalleBE>();
                //if (this._lvObjPedido != null)
                //{
                //    lstDetalle = this._lvObjPedido.Detalle;
                //}
                //DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                #region generación de repartos
                //int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
                //Panel pnlReparto = (Panel)e.Row.FindControl("pnlReparto");
                //HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

                //TextBox txtFechaEnt, txtCantPed; Label lblCantConf;
                //Label lblTipoReparto;
                //for (int i = 1; i <= repCount; i++)
                //{
                //string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                //string varLblCantConf = "lblCantConf" + i.ToString();
                //string varTxtCantPed = "txtCantPed" + i.ToString();
                //string varLblTipoReparto = "lblTipoReparto" + i.ToString();

                //this.EnsureTblRepartos();

                //txtFechaEnt = (TextBox)tblRepartos.FindControl(varTxtFechaEntrega);
                //txtCantPed = (TextBox)tblRepartos.FindControl(varTxtCantPed);
                //lblCantConf = (Label)tblRepartos.FindControl(varLblCantConf);
                //lblTipoReparto = (Label)tblRepartos.FindControl(varLblTipoReparto);

                //--- asignar valor de pedido
                //if (objItem.Repartos.Count >= i)
                //{
                //    txtCantPed.Text = objItem.Repartos[i - 1].CantPed.ToString();
                //    lblCantConf.Text = objItem.Repartos[i - 1].CantConf.ToString();
                //    txtFechaEnt.Text = objItem.Repartos[i - 1].FechaEntrega.ToString("dd/MM/yyyy");
                //}
                //}
                #endregion
            }
        }

        protected override void OnPreLoad(EventArgs e)
        {
            base.OnPreLoad(e);
        }

        protected void cgvMateriales_PreRender(object sender, EventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            this.EnsureTblRepartos();

            UsuarioWebBE uw = new UsuarioWebBE();
            uw = (UsuarioWebBE)Session["UsuarioWeb"];

            foreach (GridViewRow row in cgvMateriales.Rows)
            {
                HiddenField hidPosicion = (HiddenField)row.FindControl("hidPosicion");
                string posActual = hidPosicion.Value.PadLeft(6, '0');

                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });
                if (objItem != null)
                {
                    CargarDescuentos(row, objItem);
                }

            }
        }
        //------------------------------
        private void EnsureTblRepartos()
        {
            foreach (GridViewRow row in cgvMateriales.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CreateTblDescuentos(row);
                }
            }
        }

        //rgutierrez 05.12.2011
        private void CreateTblDescuentos(GridViewRow row)
        {
            HiddenField hidPos = (HiddenField)row.FindControl("hidPosicion");
            PedidoBE objPedido = (PedidoBE)Session["Pedido"];
            DetalleBE objDetalle = objPedido.Detalle.Find(X => X.Posicion == hidPos.Value);
            LinkButton lnkCodMaterial = (LinkButton)row.FindControl("lnkCodMaterial");
            DropDownList cmbLote = (DropDownList)row.FindControl("cmbLote");

            UsuarioWebBE uw = new UsuarioWebBE();
            uw = (UsuarioWebBE)Session["UsuarioWeb"];
            objPedido.Sector = uw.sector;
            objPedido.OrgVentas = uw.OrgVentas;
            objPedido.CanalDist = uw.CanalDist;

            /*string varHidClaseCondicion;
            string varTxtImporte;
            string varLblValor;*/

            string retVal;
            //objPedido.CodOficina = cmbOficina.SelectedValue;

            List<CondicionBE> lstDctos = new List<CondicionBE>();
            lstDctos = CondicionBC.Instance.ObtenerCondiciones(objPedido, objDetalle, out retVal);
            DescuentoBE condTmp = null;//condición temporal

            GridView gvCond = (GridView)row.FindControl("gvDescuento");
            gvCond.DataSource = lstDctos;
            gvCond.DataBind();

            int i = 0;

            foreach (GridViewRow fila in gvCond.Rows)
            {
                Label lDenominacion = (Label)fila.FindControl("lblDenominacion");
                TextBox txtImp = (TextBox)fila.FindControl("txtImporte");
                Label lValor = (Label)fila.FindControl("lblValor");
                Label lMaximo = (Label)fila.FindControl("lblMaximo");

                lDenominacion.Text = lstDctos[i].ClaseCondicion + " - " + lstDctos[i].Denominacion;

                condTmp = objDetalle.LstCond.Find(X => X.Condicion == lstDctos[i].ClaseCondicion);
                txtImp.Text = condTmp != null ? condTmp.Importe.ToString() : "0.00";

                //determinar si condición es automática o manual:
                if (lstDctos[i].Tratamiento == "D")
                {
                    txtImp.Enabled = false;
                    if (condTmp != null) { condTmp.Manual = false; }//condición automática
                }
                else if (lstDctos[i].Tratamiento == "A" || lstDctos[i].Tratamiento == "C")
                {
                    txtImp.Enabled = true;
                    if (condTmp != null) { condTmp.Manual = true; }//condición manual
                }
                //determinar si condición es porcentual o monto:
                if (condTmp != null)
                {
                    if (lstDctos[i].ReglaCalculo != null)
                    {
                        if (lstDctos[i].ReglaCalculo.Equals("A"))
                        {
                            condTmp.esPorcentaje = true;
                        }
                        else
                        {
                            condTmp.esPorcentaje = false;
                        }
                    }

                }

                lValor.Text = condTmp != null ? (condTmp.Valor).ToString() : "0.00";

                lMaximo.Text = lstDctos[i].LimiteInferior.ToString();

                i++;
            }
        }

        //rgutierrez 06.12.2011
        protected void ibtnCloseDctoTotal_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];

                ImageButton ibtnCloseDctoTotal = (ImageButton)sender;
                Panel pnlDctoTotal = (Panel)ibtnCloseDctoTotal.Parent;
                DataControlFieldCell dli = (DataControlFieldCell)pnlDctoTotal.Parent;
                HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                ModalPopupExtender mpeDctoTotal = (ModalPopupExtender)dli.FindControl("mpeDctoTotal");

                string posActual = hidPosicion.Value.PadLeft(6, '0');
                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; }); DescuentoBE dctoTmp = null;

                #region guardar descuentos


                GridView gv = (GridView)pnlDctoTotal.FindControl("gvDescuento");
                DescuentoBE objCondBE = null;

                foreach (GridViewRow fila in gv.Rows)
                {
                    TextBox txtImp = (TextBox)fila.FindControl("txtImporte");
                    HiddenField hfCOndicion = (HiddenField)fila.FindControl("hfClaseCondicion");

                    if (txtImp.Text.Trim() == "")
                    {
                        txtImp.Text = "0";
                    }

                    dctoTmp = objItem.LstCond.Find(X => X.Condicion == hfCOndicion.Value);
                    if (dctoTmp != null)
                    {
                        dctoTmp.Importe = Convert.ToDecimal(txtImp.Text);
                        dctoTmp.Valor = objItem.Cantidad * dctoTmp.Importe;//22.01.2013 MTEJADA
                    }
                    else if (txtImp.Enabled == true && !txtImp.Text.Equals("0"))
                    {
                        objCondBE = new DescuentoBE();
                        objCondBE.Condicion = hfCOndicion.Value;
                        objCondBE.Importe = Convert.ToDecimal(txtImp.Text);
                        objCondBE.Manual = true;
                        objItem.LstCond.Add(objCondBE);
                    }
                }

                #endregion

                Session["Pedido"] = this._lvObjPedido;
                mpeDctoTotal.Hide();
                upMain.Update();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void cgvMateriales_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //-- seleccionar los valores q se tienen en sesion
                HiddenField hidPosicion = (HiddenField)e.Row.FindControl("hidPosicion");
                string posActual = hidPosicion.Value.PadLeft(6, '0');

                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                ////------------------------------------------------

                //--- Motivos de Rechazo
                DropDownList cmbMotivoRechazo = (DropDownList)e.Row.FindControl("cmbMotivoRechazo");
                if (cmbMotivoRechazo != null)
                {
                    Dictionary<string, List<GenericBE>> dict = (Dictionary<string, List<GenericBE>>)Session["CargarCombos"];

                    cmbMotivoRechazo.DataSource = dict["motivoRechazo"].ToList();
                    cmbMotivoRechazo.DataTextField = "Descripcion";
                    cmbMotivoRechazo.DataValueField = "Codigo";
                    cmbMotivoRechazo.DataBind();
                    cmbMotivoRechazo.SelectedValue = "";

                    if (objItem.MotivoRechazo != null)
                    {
                        cmbMotivoRechazo.SelectedValue = objItem.MotivoRechazo;
                    }
                }
                //-----------------------------------------------------------------------------
                //-----------------------------------------------------------------------------
                string op = Session["Operacion"].ToString();
                string numPedidoModif = string.Empty;
                string numPosModif = string.Empty;
                if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                {
                    numPedidoModif = this._lvObjPedido.NumPedido;
                    numPosModif = objItem.Posicion;
                }

                decimal pCantTot = lstDetalle.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(objItem.Posicion))
                                                                        && (X.CodMaterial == objItem.CodMaterial)
                                                                        && (X.CodAlmacen == objItem.CodAlmacen)
                                                                        && (X.CodCentro == objItem.CodCentro)
                                                                        && (X.CodLote == objItem.CodLote)).Sum(Y => Y.Cantidad);
                pCantTot += objItem.Cantidad;


                //--- salida de validación tipo posición...
                //-- Cambiar TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011
                //Falta añadir condición para que haga esta validación
                if (ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "docValiZ"))
                {
                    TextBox lblTipoPosicion = (TextBox)e.Row.FindControl("lblTipoPosicion");
                    if (objItem != null)
                    {
                        UsuarioWebBE uw = new UsuarioWebBE();
                        if (Session["UsuarioWeb"] != null)
                        {
                            uw = (UsuarioWebBE)Session["UsuarioWeb"];
                        }

                        if (objItem.Material == null)
                        {
                            objItem.Material = MaterialBC.Instance.leerMaterial(objItem.CodMaterial, uw.OrgVentas, uw.CanalDist, uw.sector, uw.OfVentas, uw.Usuario, uw.centro, uw.almacen);
                        }

                        lblTipoPosicion.Text = objItem.TipoPosicion;
                    }
                }
            }

        }

        private bool documentoValido()
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];
            //----------------
            string op = "";
            if (Session["Operacion"] != null)
            {
                op = Session["Operacion"].ToString();
            }

            if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("CotVMS"))
            {
                if (cmbCondicionesPago.SelectedValue == "")
                {
                    Session["Mensaje"] = "Documento incompleto, por favor ingrese la cond. de pago.";
                    tcMain.ActiveTabIndex = 0;
                    cmbCondicionesPago.Focus();
                    return false;
                }
            }

            if (Session["UsuarioWeb"] == null)
            {
                Session["Mensaje"] = "Existen Parámetros no asignados al usuario.";
                tcMain.ActiveTabIndex = 0;
                cmbCondicionesPago.Focus();
                return false;
            }

            if (Session["UsuarioWeb"] != null)
            {
                UsuarioWebBE uw = new UsuarioWebBE();
                uw = (UsuarioWebBE)Session["UsuarioWeb"];
                if (uw.OrgVentas == "")
                {
                    Session["Mensaje"] = "No existe la organización de ventas asignada al usuario.";
                    tcMain.ActiveTabIndex = 0;
                    cmbCondicionesPago.Focus();
                    return false;
                }
                if (uw.CanalDist == "")
                {
                    Session["Mensaje"] = "No existe canal de distribución asignado al usuario.";
                    tcMain.ActiveTabIndex = 0;
                    cmbCondicionesPago.Focus();
                    return false;
                }
                if (uw.sector == "")
                {
                    Session["Mensaje"] = "No existe un sector asignado al usuario.";
                    tcMain.ActiveTabIndex = 0;
                    cmbCondicionesPago.Focus();
                    return false;
                }
            }

            string retMsg = "";
            foreach (DetalleBE objItem in this._lvObjPedido.Detalle)
            {
                if (objItem.Cantidad <= 0)
                {
                    retMsg += string.Format(ParametroBC.Instance.getParamValue("msgCantMCero"), objItem.Posicion);
                    tcMain.ActiveTabIndex = 1;
                    break;
                }

                //Valida si la caracteristica "Color" está ingresada
                UsuarioWebBE usw = (UsuarioWebBE)Session["UsuarioWeb"];
                if (usw.sector == "01" && cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("CotVMS"))
                {
                    if (objItem.color == null || objItem.color == "")
                    {
                        retMsg += string.Format(ParametroBC.Instance.getParamValue("msgColor"), objItem.Posicion);
                        tcMain.ActiveTabIndex = 1;
                        break;
                    }
                }
                //**************************************************
                decimal pSubtotal = objItem.SubTotal;
                if (pSubtotal <= 0m && !ParametroBC.Instance.esTipoX(cmbTipoDocumento.SelectedValue, "CodReserva"))
                {
                    retMsg += string.Format("- Subtotal en posición {0} no puede ser menor o igual a cero.\n", objItem.Posicion);
                    tcMain.ActiveTabIndex = 1;
                    break;
                }
            }
            if (retMsg != string.Empty) { Session["Mensaje"] = retMsg; return false; }
            return true;
        }

        #region Limpia Pantalla

        private void limpiarCliente()
        {
            Session.Remove("Cliente");
            //txtCodCliente.Text = string.Empty;
            txtNomCliente.Text = string.Empty;
            txtDirCliente.Text = string.Empty;
            //---
            txtCodCliente.ReadOnly = false;
            txtNomCliente.ReadOnly = false;
            aceNomCliente.Enabled = true;
        }

        private void limpiarClienteEventual()
        {
            Session.Remove("ClienteEventual");

            txtCodSolicitante.Text = string.Empty;
            txtNomSolicitante.Text = string.Empty;
            txtDirSolicitante.Text = string.Empty;
            txtTelSolicitante.Text = string.Empty;
            txtNifSolicitante.Text = string.Empty;
        }

        private void limpiarInterlocutores()
        {
            Session.Remove("Interlocutores");
            PedidoBE objTmp = (PedidoBE)Session["Pedido"];
            if (objTmp != null) { objTmp.Interlocutores = null; }
            Session["Pedido"] = objTmp;

            txtCodSolicitante.Text = string.Empty;
            txtNomSolicitante.Text = string.Empty;
            txtDirSolicitante.Text = string.Empty;
            txtTelSolicitante.Text = string.Empty;
            txtNifSolicitante.Text = string.Empty;
            //---
            txtCodDestMerc.Text = string.Empty;
            txtNomDestMerc.Text = string.Empty;
            txtDirDestMerc.Text = string.Empty;
            txtTelDestMerc.Text = string.Empty;
            //---
            txtCodDestFact.Text = string.Empty;
            txtNomDestFact.Text = string.Empty;
            txtDirDestFact.Text = string.Empty;
            txtTelDestFact.Text = string.Empty;
            //---
            txtCodResPago.Text = string.Empty;
            txtNomResPago.Text = string.Empty;
            txtDirResPago.Text = string.Empty;
            txtTelResPago.Text = string.Empty;
            txtNifResPago.Text = string.Empty;
            //---
            txtCodVendedor1.Text = string.Empty;
            txtNomVendedor1.Text = string.Empty;
            //---
            txtCodEntFinanciera.Text = string.Empty;
            txtNomEntFinanciera.Text = string.Empty;
            //---
            txtCodInstitucion.Text = string.Empty;
            txtNomInstitucion.Text = string.Empty;
            //---
            txtCodGpoEmp.Text = string.Empty;
            txtNomGpoEmp.Text = string.Empty;
        }

        private void limpiarTextos()
        {
            txtTextoReferencia.Text = string.Empty;
            txtTextoObservaciones.Text = string.Empty;
            txtTextoGlosa.Text = string.Empty;
            txtTextoAprob.Text = string.Empty;
            txtTextoGerencia.Text = string.Empty;
            txtTextoAnticipo.Text = string.Empty;
        }

        #endregion



        private void copiarClienteEventual()
        {
            ClienteBE objTempCliente = new ClienteBE(); objTempCliente.Descripcion = "";
            if (txtNomDestMerc.Text == string.Empty || txtNomDestMerc.Text == objTempCliente.Descripcion)
            {
                txtNomDestMerc.Text = txtNomSolicitante.Text;
            }
            if (txtDirDestMerc.Text.Equals(""))
            {
                txtDirDestMerc.Text = txtDirSolicitante.Text;
                txtTelDestMerc.Text = txtTelSolicitante.Text;
            }

            if (txtNomDestFact.Text == string.Empty || txtNomDestFact.Text == objTempCliente.Descripcion)
            {
                txtNomDestFact.Text = txtNomSolicitante.Text;
            }
            if (txtDirDestFact.Text.Equals(""))
            {
                txtDirDestFact.Text = txtDirSolicitante.Text;
                txtTelDestFact.Text = txtTelSolicitante.Text;
            }

            if (txtNomResPago.Text == string.Empty || txtNomResPago.Text == objTempCliente.Descripcion)
            {
                txtNomResPago.Text = txtNomSolicitante.Text;
                txtDirResPago.Text = txtDirSolicitante.Text;
                txtTelResPago.Text = txtTelSolicitante.Text;
                txtNifResPago.Text = txtNifSolicitante.Text;
            }
        }

        private void cargarInterlocutores()
        {
            if (Session["Cliente"] != null)
            {
                if (Session["RUCDNI"] != null)
                {
                    if (Session["RUCDNI"].ToString().Equals(""))
                    {
                        chkRucDNI.Checked = false;
                    }
                    else
                    {
                        chkRucDNI.Checked = true;
                    }
                }
                ClienteBE pObjCliente = (ClienteBE)Session["Cliente"];
                if (pObjCliente != null && pObjCliente.Codigo != null)
                {
                    if (Session["Pedido"] != null)
                    {
                        this._lvObjPedido = (PedidoBE)Session["Pedido"];
                        //txtCorreo.Text = this._lvObjPedido.Mail;
                    }
                    if (pObjCliente.nif == ParametroBC.Instance.getParamValue("CodEventual") || pObjCliente.Codigo == ParametroBC.Instance.getParamValue("CodEventual"))// pObjCliente.Eventual)
                    {
                        //--- habilitar campos de solicitante
                        //if (pObjCliente.nif == "0000000001")
                        //{
                        //    txtCodSolicitante.ReadOnly = false;
                        //}
                        //else
                        //{
                        txtCodSolicitante.ReadOnly = true;
                        //}
                        txtNomSolicitante.ReadOnly = false;
                        txtDirSolicitante.ReadOnly = false;
                        txtTelSolicitante.ReadOnly = false;
                        txtNifSolicitante.ReadOnly = false;
                        //--- deshabilitar auto complete
                        aceNomSolicitante.Enabled = false;
                        txtNomSolicitante.Focus();
                        txtCodSolicitante.Text = pObjCliente.Codigo;
                        txtCodDestMerc.Text = pObjCliente.Codigo;
                        txtCodDestFact.Text = pObjCliente.Codigo;
                        txtCodResPago.Text = pObjCliente.Codigo;

                        UsuarioWebBE uWeb = new UsuarioWebBE();
                        uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                        if (string.IsNullOrEmpty(txtCodVendedor1.Text.Trim()))
                        {
                            txtCodVendedor1.Text = uWeb.PerNr;
                            txtNomVendedor1.Text = uWeb.Descripcion;
                        }

                        if (_lvObjPedido.Interlocutores != null)
                        {
                            foreach (InterlocutorBE inter in _lvObjPedido.Interlocutores)
                            {
                                if (ParametroBC.Instance.esTipoX(inter.Funcion, "IlocResPago"))
                                {
                                    PoblacionBE objTmpPob = new PoblacionBE();
                                    PoblacionBE objTmpPobBlanck = new PoblacionBE();
                                    List<PoblacionBE> lstTmpPob = new List<PoblacionBE>();

                                    objTmpPobBlanck.Descripcion = "";
                                    objTmpPobBlanck.Codigo = "";
                                    lstTmpPob.Add(objTmpPobBlanck);
                                    try
                                    {
                                        ddlRegion.SelectedValue = inter.Region;
                                        //objTmpPob.Descripcion = inter.Poblacion;
                                        //objTmpPob.Codigo = inter.Poblacion;
                                        //lstTmpPob.Add(objTmpPob);


                                        //ddlPoblacion.DataTextField = "Descripcion";
                                        //ddlPoblacion.DataValueField = "Codigo";
                                        //ddlPoblacion.DataSource = lstTmpPob;
                                        //ddlPoblacion.DataBind();
                                        //ddlPoblacion.SelectedIndex = 1;

                                        cargaPobyReg();
                                    }
                                    catch (Exception ex)
                                    { }

                                    ddlRegion.Enabled = false;
                                    ddlPoblacion.Enabled = false;

                                    break;
                                }
                            }
                        }

                        
                    }
                    else
                    {
                        UsuarioWebBE uWeb = new UsuarioWebBE();
                        uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                        List<InterlocutorBE> lstInterlocutor = ClienteBC.Instance.buscaInterlocutores(pObjCliente.Codigo, uWeb.OrgVentas, uWeb.CanalDist, uWeb.sector);
                        //--- deshabilitar campos del solicitante
                        ClienteBE objC = new ClienteBE();

                        if (Session["Cliente"] != null)
                        {
                            objC = (ClienteBE)Session["Cliente"];
                        }

                        if (objC.nif == ParametroBC.Instance.getParamValue("CodEventual"))
                        {
                            txtCodSolicitante.ReadOnly = false;
                            txtNomSolicitante.ReadOnly = false;
                            txtDirSolicitante.ReadOnly = false;
                            txtTelSolicitante.ReadOnly = false;
                            txtNifSolicitante.ReadOnly = false;
                        }
                        else
                        {
                            txtCodSolicitante.ReadOnly = true;
                            txtNomSolicitante.ReadOnly = true;
                            txtDirSolicitante.ReadOnly = true;
                            txtTelSolicitante.ReadOnly = true;
                            txtNifSolicitante.ReadOnly = true;
                        }

                        //--- habilitar auto complete
                        aceNomSolicitante.Enabled = true;
                        //lstAux = new List<InterlocutorBE>(new HashSet<InterlocutorBE>(lstAux));

                        if (_lvObjPedido.Interlocutores != null)
                        {
                            foreach (InterlocutorBE inter in _lvObjPedido.Interlocutores)
                            {
                                if (ParametroBC.Instance.esTipoX(inter.Funcion, "IlocEntFinan"))
                                {
                                    txtCodEntFinanciera.Text = inter.Cliente.Codigo;
                                    txtNomEntFinanciera.Text = inter.Cliente.Descripcion;
                                    break;
                                }
                            }

                            foreach (InterlocutorBE inter in _lvObjPedido.Interlocutores)
                            {
                                if (ParametroBC.Instance.esTipoX(inter.Funcion, "IlocResPago"))
                                {
                                    try
                                    {
                                        //List<PoblacionBE> lstTmpPob = ((List<PoblacionBE>)Session["lstPoblacion"]).FindAll(x => x.Region == inter.Region);
                                        //int inx = lstTmpPob.FindIndex(x => x.Descripcion == inter.Poblacion);
                                        PoblacionBE objTmpPob = new PoblacionBE();
                                        PoblacionBE objTmpPobBlanck = new PoblacionBE();
                                        List<PoblacionBE> lstTmpPob = new List<PoblacionBE>();
                                        objTmpPobBlanck.Descripcion = "";
                                        objTmpPobBlanck.Codigo = "";
                                        lstTmpPob.Add(objTmpPobBlanck);

                                        try
                                        {
                                            ddlRegion.SelectedValue = inter.Region;
                                            //objTmpPob.Descripcion = inter.Poblacion;
                                            //objTmpPob.Codigo = inter.Poblacion;
                                            
                                            //lstTmpPob.Add(objTmpPob);
                                            //ddlPoblacion.DataTextField = "Descripcion";
                                            //ddlPoblacion.DataValueField = "Codigo";
                                            //ddlPoblacion.DataSource = lstTmpPob;
                                            //ddlPoblacion.DataBind();
                                            //ddlPoblacion.SelectedIndex = 1;

                                            cargaPobyReg();
                                        }
                                        catch (Exception ex)
                                        { }
                                        ddlRegion.Enabled = false;
                                        ddlPoblacion.Enabled = false;

                                        break;
                                    }
                                    catch (Exception ex)
                                    { 
                                    
                                    }
                                }
                            }
                        }

                        foreach (InterlocutorBE objInt in lstInterlocutor)
                        {
                            if (ParametroBC.Instance.esTipoX(objInt.Funcion, "IlocCliente"))
                            {
                                txtCodSolicitante.Text = objInt.Cliente.Codigo;
                                txtNomSolicitante.Text = objInt.Cliente.Descripcion;
                                txtDirSolicitante.Text = objInt.Cliente.Direccion;
                                txtTelSolicitante.Text = objInt.Cliente.Telefono;
                                txtNifSolicitante.Text = objInt.Cliente.Ruc;
                            }
                            else if (ParametroBC.Instance.esTipoX(objInt.Funcion, "IlocDestMerc"))
                            {
                                txtCodDestMerc.Text = objInt.Cliente.Codigo;
                                txtNomDestMerc.Text = objInt.Cliente.Descripcion;
                                txtDirDestMerc.Text = objInt.Cliente.Direccion;
                                txtTelDestMerc.Text = objInt.Cliente.Telefono;
                            }
                            else if (ParametroBC.Instance.esTipoX(objInt.Funcion, "IlocDestFact"))
                            {
                                txtCodDestFact.Text = objInt.Cliente.Codigo;
                                txtNomDestFact.Text = objInt.Cliente.Descripcion;
                                txtDirDestFact.Text = objInt.Cliente.Direccion;
                                txtTelDestFact.Text = objInt.Cliente.Telefono;
                            }
                            else if (ParametroBC.Instance.esTipoX(objInt.Funcion, "IlocResPago"))
                            {
                                txtCodResPago.Text = objInt.Cliente.Codigo;
                                txtNomResPago.Text = objInt.Cliente.Descripcion;
                                txtDirResPago.Text = objInt.Cliente.Direccion;
                                txtTelResPago.Text = objInt.Cliente.Telefono;
                                txtNifResPago.Text = objInt.Cliente.Ruc;
                                
                            }
                            //else if (ParametroBC.Instance.esTipoX(objInt.Funcion, "IlocVendedor1"))
                            //{
                            //    txtCodVendedor1.Text = objInt.Persona.CodPersona;
                            //    txtNomVendedor1.Text = objInt.Persona.Descripcion;
                            //}
                        }
                        if (string.IsNullOrEmpty(txtCodVendedor1.Text.Trim()))
                        {
                            txtCodVendedor1.Text = uWeb.PerNr;
                            txtNomVendedor1.Text = uWeb.Descripcion;
                        }
                    }
                }
            }
        }

        private void bloquearCliente(bool param)
        {
            txtCodCliente.ReadOnly = param;
            txtNomCliente.ReadOnly = param;
            aceNomCliente.Enabled = !param;
            txtCodSolicitante.ReadOnly = param;
            txtNomSolicitante.ReadOnly = param;
            aceNomSolicitante.Enabled = !param;
            txtDirSolicitante.ReadOnly = param;
            txtTelSolicitante.ReadOnly = param;
            //txtNifSolicitante.ReadOnly = param;
        }

        private void bloquearInterl(bool param)
        {
            txtCodDestFact.ReadOnly = param;
            txtNomDestFact.ReadOnly = param;
            //aceNomDestFact.Enabled = !param;
            txtDirDestFact.ReadOnly = param;
            txtTelDestFact.ReadOnly = param;

            txtCodDestMerc.ReadOnly = param;
            txtNomDestMerc.ReadOnly = param;
            //aceNomDestMerc.Enabled = !param;
            txtDirDestMerc.ReadOnly = param;
            txtTelDestMerc.ReadOnly = param;

            txtCodResPago.ReadOnly = param;
            txtNomResPago.ReadOnly = param;
            //aceNomResPago.Enabled = !param;
            txtDirResPago.ReadOnly = param;
            txtTelResPago.ReadOnly = param;
            txtNifResPago.ReadOnly = param;

            txtCodEntFinanciera.ReadOnly = param;
            txtNomEntFinanciera.ReadOnly = param;

            UsuarioWebBE usw = (UsuarioWebBE)Session["UsuarioWeb"];

            if (usw.sector == "00")
            {
                txtCodVendedor1.ReadOnly = param;
                txtNomVendedor1.ReadOnly = param;
            }

            //txtCodGpoEmp.ReadOnly = param;
            //txtNomGpoEmp.ReadOnly = param;

            //txtCodInstitucion.ReadOnly = param;
            //txtNomInstitucion.ReadOnly = param;
        }

        protected void txtCodCliente_TextChanged(object sender, EventArgs e)
        {
            try
            {
                this.limpiarInterlocutores();
                this.limpiarClienteEventual();
                this.limpiarCliente();

                string strCodCli = txtCodCliente.Text.Trim();
                if (!strCodCli.Equals(""))
                {
                    //List<ClienteBE> lstC = new List<ClienteBE>();
                    UsuarioWebBE uWeb = new UsuarioWebBE();
                    uWeb = (UsuarioWebBE)Session["UsuarioWeb"];

                    List<ClienteBE> lstC = (List<ClienteBE>)Session["lstClientes"];
                    if (lstC != null && lstC.Count > 0)
                    {
                        _lvObjCliente = lstC.Find(X => X.Codigo == strCodCli);
                    }
                    if (_lvObjCliente == null)
                    {
                        _lvObjCliente = ClienteBC.Instance.leer(strCodCli, uWeb);
                        if (_lvObjCliente == null) { throw new Exception("Código de cliente inválido."); }
                    }
                    txtNomCliente.Text = _lvObjCliente.Descripcion;
                    txtDirCliente.Text = _lvObjCliente.DireccionCompleta;

                    //adicionamos la asignacion a la poblacion y region del cliente
                    try
                    {
                        ddlPoblacion.SelectedValue = _lvObjCliente.Mcod3;
                        ddlRegion.Text = _lvObjCliente.Mcod3;
                        ddlPoblacion.Enabled = true;
                        ddlRegion.Enabled = true;
                    }
                    catch { }
                    /**Para controlar pedido de referencia**/

                    if (this.hfIndicadorCliente.Value == "S")
                    {
                        List<string> lstCodigos = (List<string>)Session["ListaCodigos"];
                        Session["MaterialesList"] = null;

                        if (Session["Pedido"] != null)
                        {
                            PedidoBE pedido = (PedidoBE)Session["Pedido"];
                            pedido.Detalle = null;
                            Session["Pedido"] = pedido;
                        }

                        this.cgvMateriales.DataSource = null;
                        this.cgvMateriales.DataBind();

                        foreach (string codigo in lstCodigos)
                        {
                            decimal cant = 1;
                            string retVal = this.addItem(codigo, cant);

                            if (retVal.Equals(""))
                            {
                                this.buscaPrecios();
                            }
                            else
                            {
                                Session["Mensaje"] = retVal;
                                ((Site)Master).muestraMensajes();
                            }
                        }
                    }

                    /***/
                    try { cmbCondicionesPago.SelectedValue = _lvObjCliente.cond_pago; }
                    catch { cmbCondicionesPago.SelectedValue = string.Empty; }

                    Session["Cliente"] = _lvObjCliente;
                    this.bloquearCliente(true); txtCodCliente.ReadOnly = false;

                    //lstC = ClienteBC.Instance.buscarCliente(txtCodCliente.Text, "", uWeb);
                    //if (lstC.Count > 0)
                    //{
                    //    _lvObjCliente = lstC[0];
                    //    string tmpNomCli = _lvObjCliente == null ? "" : _lvObjCliente.Descripcion;
                    //    string tmpDirCli = _lvObjCliente == null ? "" : _lvObjCliente.DireccionCompleta;
                    //    string tmpRucCli = _lvObjCliente == null ? "" : _lvObjCliente.Ruc;
                    //    if (_lvObjCliente == null) { tmpNomCli = "No se encontró el cliente..."; }

                    //    txtNomCliente.Text = tmpNomCli;
                    //    txtDirCliente.Text = tmpDirCli;
                    //    Session["Cliente"] = _lvObjCliente;

                    //    this.bloquearCliente(true);
                    //    //-- habilitar codigo de cliente
                    //    txtCodCliente.ReadOnly = false;
                    //}
                }
                if (_lvObjCliente != null)
                {
                    this.cargarInterlocutores();
                    this.guardaInterlocutores();
                }
                this.guardaPedido();
                this.buscaPrecios();
            }
            catch (Exception ex)
            {
                string str = (Session["Mensaje"] != null ? Session["Mensaje"].ToString() : "");
                Session["Mensaje"] = string.IsNullOrEmpty(str) ? ex.Message : str + "\r\n" + ex.Message;
            }
        }

        protected void lnkAddItems_Click(object sender, EventArgs e)
        {
            try
            {
                if (chkRucDNI.Checked)
                {
                    Session["RUCDNI"] = chkRucDNI.Checked == true ? "X" : "";
                }
                if (Session["Cliente"] != null)
                {
                    Response.Redirect("Stock.aspx");
                }
                else
                {
                    Session["Mensaje"] = "Debe indicar el solicitante antes de añadir los materiales.";
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private void calculaFechaEntregaItem(DetalleBE objDetalle)
        {
            DateTime fechaCalculada, fechaActual = DateTime.Today;
            double factor = 0;
            if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas2"))
            {
                factor = 2;
            }
            else if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas1"))
            {
                factor = 1;
            }
            else
            {
                factor = 0;
            }
            //-----
            int count = Convert.ToInt32(factor);
            //Si es domingo pasa como si fuera lunes
            if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                count += 1;
            }
            fechaCalculada = fechaActual;
            for (int i = 1; i <= count; i++)
            {
                if (((string)Session["Operacion"]).Equals("crear"))
                {
                    fechaCalculada = fechaCalculada.AddDays(1);
                    if (fechaCalculada.DayOfWeek == DayOfWeek.Sunday)
                    {
                        fechaCalculada = fechaCalculada.AddDays(1);
                    }
                }
            }
        }

        private void buscaPrecios()
        {
            this._lvObjPedido = (PedidoBE)Session["Pedido"];

            PedidoBC objPBC = PedidoBC.Instance;
            if (hidDescuentoTotal.Value != "")
            {
                objPBC.DescuentoTotal = Convert.ToDecimal(hidDescuentoTotal.Value);
            }
            _lvObjPedido = CargarDatosUsuarioWeb_a_Pedido(_lvObjPedido);


            InterlocutorBE cRG = _lvObjPedido.Interlocutores.Find(X => X.Funcion == "RG");
            if (ddlPoblacion.SelectedItem != null)
            {
                cRG.Region = ddlRegion.SelectedValue;
                cRG.Poblacion = ddlPoblacion.SelectedItem.Text;
            }
            string retMsg = string.Empty;

            if (cmbTipoDocumento.SelectedValue != ParametroBC.Instance.getParamValue("Anticipo"))
            {
                retMsg = objPBC.cargarCondiciones(ref this._lvObjPedido);
            }
            else
            {
                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                DescuentoBE objPre = new DescuentoBE();
                foreach (DetalleBE objDetalle in _lvObjPedido.Detalle)
                {
                    objPre = objDetalle.LstCond.Find(X => X.Condicion == "YP03");
                    if (objPre != null)
                    {
                        objPre.esPorcentaje = false;
                        objPre.Importe = objDetalle.Precio.Importe;
                        objPre.Valor = objDetalle.Precio.Valor;
                    }
                    else
                    {
                        objPre = new DescuentoBE();
                        objPre.Condicion = ParametroBC.Instance.getParamValue("CondAnticipo");
                        objPre.esPorcentaje = false;
                        objPre.Manual = true;
                        objPre.Importe = objDetalle.Precio.Importe;
                        objDetalle.LstCond.Add(objPre);
                    }
                }
            }
            Session["Pedido"] = this._lvObjPedido;

            if (retMsg != string.Empty)
            {
                Session["Mensaje"] = retMsg;
            }
            else
            {
                this.cargaPedido();
            }
        }

        #region Botones
        //modificado
        private string addItem(string pCodMat, decimal pCant)
        {
            string retMsg = "";
            try
            {
                string codLote = string.Empty;
                string codStatus = string.Empty;
                if (this.hfIndReferencia.Value == "S")
                {
                    string[] codigos = pCodMat.Split('$');
                    pCodMat = codigos[0];
                    codLote = codigos[1];
                    codStatus = codigos[2];
                }


                this._lvObjPedido = (PedidoBE)Session["Pedido"];
                List<DetalleBE> lstMateriales = (this._lvObjPedido.Detalle == null) ? new List<DetalleBE>() : this._lvObjPedido.Detalle;
                DetalleBE objDetalle = new DetalleBE();
                objDetalle.CodMaterial = pCodMat;
                objDetalle.Cantidad = pCant;
                //la organizacion de ventas y canal lo sacamos del usuarioweb
                UsuarioWebBE usW = new UsuarioWebBE();
                if (Session["UsuarioWeb"] != null)
                {
                    usW = (UsuarioWebBE)Session["UsuarioWeb"];
                }
                List<MaterialBE> lstM = new List<MaterialBE>();
                MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, usW.OrgVentas, usW.CanalDist, usW.sector, usW.OfVentas, usW.Usuario, usW.centro, usW.almacen);
                if (objMaterial != null)
                {

                    lstM.Add(objMaterial);

                    if (lstM.Count > 0)
                    {
                        objMaterial = new MaterialBE();
                        objMaterial = lstM[0];
                    }
                    if (objMaterial != null)
                    {
                        objDetalle.CodCentro = usW.centro;
                        objDetalle.CodAlmacen = usW.almacen;
                        objDetalle.DescMaterial = objMaterial.DescMaterial;
                        objDetalle.CodUMedida = objMaterial.CodUMedida;
                        objDetalle.Peso = objMaterial.Peso;
                        objDetalle.UMedidaRendimiendo = objMaterial.UMedidaRendimiendo;
                        objDetalle.ValorRendimiento = objMaterial.ValorRendimiento;
                        objDetalle.TipoMaterial = objMaterial.TipoMaterial;
                        objDetalle.Material = objMaterial;
                        objDetalle.CodLote = codLote;
                        objDetalle.codstatus = codStatus;
                        //si UM = UNidad => redondear al entero mayor
                        if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                        {
                            objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                        }

                        //--- cálculo de posición
                        string tmpPos = "";
                        if (lstMateriales.Count > 0)
                        {
                            tmpPos = lstMateriales[lstMateriales.Count - 1].Posicion;
                        }
                        else
                        {
                            tmpPos = "00";
                        }
                        int posi = Convert.ToInt16(tmpPos) + 10;
                        Session["ultimaPosAdd"] = posi;
                        objDetalle.Posicion = posi.ToString();
                        lstMateriales.Add(objDetalle);

                        this._lvObjPedido.Detalle = lstMateriales;
                        Session["Pedido"] = this._lvObjPedido;
                    }
                    else
                    {
                        retMsg = "No se encontró el material.";
                    }
                }
                else
                {
                    retMsg = "No se encontró el material.";
                }
            }
            catch (Exception ex)
            {
                retMsg = ex.Message;
            }
            return retMsg;
        }

        protected void ibtnAddNuevoMat_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (chkRucDNI.Checked)
                {
                    Session["RUCDNI"] = chkRucDNI.Checked == true ? "X" : "";
                }
                if (Session["Cliente"] == null)
                {
                    Session["Mensaje"] = "Debe indicar el solicitante antes de añadir los materiales.";
                }
                else
                {
                    txtCantNuevoMat.Text = txtCantNuevoMat.Text.Trim().Equals("") ? "1.000" : txtCantNuevoMat.Text.Trim();
                    decimal cant = Convert.ToDecimal(txtCantNuevoMat.Text);
                    string retVal = this.addItem(txtCodNuevoMat.Text.Trim(), cant);

                    if (retVal.Equals(""))
                    {
                        ////this._lvObjPedido = (PedidoBE)Session["Pedido"];
                        this.buscaPrecios();
                    }
                    else
                    {
                        //mensaje de error
                        Session["Mensaje"] = retVal;
                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void ibtnCloseReparto_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this._lvObjPedido = (PedidoBE)Session["Pedido"];

                ImageButton ibtnCloseReparto = (ImageButton)sender;
                Panel pnlReparto = (Panel)ibtnCloseReparto.Parent.Parent.Parent;
                DataControlFieldCell dli = (DataControlFieldCell)pnlReparto.Parent;
                //DataListItem dli = (DataListItem)pnlReparto.Parent;
                DropDownList cmbPrioridadEnt = (DropDownList)pnlReparto.FindControl("cmbPrioridadEnt");

                HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                LinkButton lnkReparto = (LinkButton)dli.FindControl("lnkReparto");
                ModalPopupExtender mpeReparto = (ModalPopupExtender)dli.FindControl("mpeReparto");

                string posActual = hidPosicion.Value.PadLeft(6, '0');
                List<DetalleBE> lstDetalle = new List<DetalleBE>();
                if (this._lvObjPedido != null)
                {
                    lstDetalle = this._lvObjPedido.Detalle;
                }
                DetalleBE objItem = lstDetalle.Find(delegate(DetalleBE obj) { return obj.Posicion == posActual; });

                //--- guardar repartos
                #region guardar repartos
                int repCount = Convert.ToInt16(ParametroBC.Instance.getParamValue("RepartoCount"));
                HtmlTable tblRepartos = (HtmlTable)pnlReparto.FindControl("tblRepartos");

                TextBox txtFechaEnt, txtCantPed; Label lblCantConf;
                DateTime fechaMayor = DateTime.Today;
                decimal cantTotal = 0m;
                for (int i = 1; i <= repCount; i++)
                {
                    string varTxtFechaEntrega = "txtFechaEntrega" + i.ToString();
                    string varLblCantConf = "lblCantConf" + i.ToString();
                    string varTxtCantPed = "txtCantPed" + i.ToString();

                    txtFechaEnt = (TextBox)tblRepartos.FindControl(varTxtFechaEntrega);
                    txtCantPed = (TextBox)tblRepartos.FindControl(varTxtCantPed);
                    lblCantConf = (Label)tblRepartos.FindControl(varLblCantConf);
                    txtCantPed.Text = txtCantPed.Text == "" ? "0" : txtCantPed.Text;

                    //--- asignar valor de pedido
                    if (!txtFechaEnt.Text.Equals("") && (Convert.ToDecimal(txtCantPed.Text) > 0m || Convert.ToDecimal(lblCantConf.Text) > 0m))
                    {
                        if (objItem.Repartos.Count < i)
                        {
                            for (int j = objItem.Repartos.Count; j <= i - 1; j++)
                            {
                                objItem.Repartos.Add(new RepartoBE());
                            }
                        }
                        objItem.Repartos[i - 1].CantPed = Convert.ToDecimal(txtCantPed.Text);
                        lblCantConf.Text = lblCantConf.Text.Equals(string.Empty) ? "0.00" : lblCantConf.Text;
                        objItem.Repartos[i - 1].CantConf = Convert.ToDecimal(lblCantConf.Text) == 0m ? Convert.ToDecimal(txtCantPed.Text) : Convert.ToDecimal(lblCantConf.Text);
                        objItem.Repartos[i - 1].FechaEntrega = Convert.ToDateTime(txtFechaEnt.Text);

                        cantTotal += objItem.Repartos[i - 1].CantPed;

                        //--- valida fecha ingresada mayor a fecha actual
                        if (objItem.Repartos[i - 1].FechaEntrega < DateTime.Today && ((string)Session["Operacion"]).Equals("crear"))//mtejada
                        {
                            throw new Exception(string.Format(ParametroBC.Instance.getParamValue("msgFechaInvalida"), i));
                        }
                        if (objItem.Repartos[i - 1].FechaEntrega <= fechaMayor && i > 1 && ((string)Session["Operacion"]).Equals("crear"))
                        {
                            throw new Exception(string.Format(ParametroBC.Instance.getParamValue("msgFechaMayor"), i, i - 1));
                        }
                        fechaMayor = objItem.Repartos[i - 1].FechaEntrega;
                    }
                    else
                    {
                        if (objItem.Repartos.Count >= i)
                        {
                            objItem.Repartos[i - 1].CantPed = 0m;
                            objItem.Repartos[i - 1].CantConf = 0m;
                        }
                    }
                }
                List<RepartoBE> lstRepAux = new List<RepartoBE>();
                int posRep = 1;
                foreach (RepartoBE itmRep in objItem.Repartos)
                {
                    if (itmRep.CantPed > 0m || itmRep.CantConf > 0m)
                    {
                        itmRep.Pos = posRep.ToString();
                        lstRepAux.Add(itmRep);
                        posRep++;
                    }
                }
                objItem.Repartos = lstRepAux;
                #endregion
                //--------------------
                if (cantTotal != objItem.Cantidad)
                {
                    throw new Exception(string.Format(ParametroBC.Instance.getParamValue("msgCantPedCantConf"), objItem.Posicion));
                }

                objItem.PrioridadEntrega = cmbPrioridadEnt.SelectedValue;
                this.calculaFechaEntregaItem(objItem);
                lnkReparto.Text = objItem.PrioridadEntrega + " " + objItem.Repartos[0].FechaEntrega.ToString("dd/MM/yy");

                Session["Pedido"] = this._lvObjPedido;
                mpeReparto.Hide();
                upMain.Update();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private string validarClientes()
        {
            string ret = "";
            this._lvObjPedido = (PedidoBE)Session["Pedido"];

            foreach (InterlocutorBE i in _lvObjPedido.Interlocutores)
            {
                if (i.Funcion == "AG")
                {
                    if (i.Cliente.Descripcion == "")
                    {
                        ret = "Falta ingresar Clientes";
                    }
                    break;
                }
            }

            return ret;
        }
        protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
        {
            bool pedConMatServ = false;
            bool pasa = true;

            #region comentado
            ////string strMsg = "";
            ////string coma = "";
            ////bool tienetipo = true;

            //if (ParametroBC.Instance.esTipoOferta(cmbTipoDocumento.SelectedValue) && (txtCorreo.Text.Equals("")) && (!cmbTipoDocumento.SelectedValue.Equals("Z004")))
            //{
            //    pasa = false;
            //    Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrCorreo");
            //}
            //if ( ( cmbTipoDocumento.SelectedValue.Equals("Z036") || cmbTipoDocumento.SelectedValue.Equals("Z037") )&&
            //     (((cmbTipoVisita.SelectedValue.Equals("") || txtTextDescVisita.Text.Equals("") ) && cmbTipoDocumento.SelectedValue.Equals("Z036")) ||
            //     ( txtTextoContactoVisita.Text.Equals("") || txtTextTelefonosVisita.Text.Equals("") ||
            //       txtTextoRefDireccion.Text.Equals("") )
            //       //|| (cmbTipoDocumento.SelectedValue.Equals("Z037") && txtTextDescInstala.Text.Equals(""))
            //       )
            //    )
            //{

            //    if (cmbTipoVisita.SelectedValue.Equals("") && cmbTipoDocumento.SelectedValue.Equals("Z036"))
            //    {
            //        pasa = false;
            //        tienetipo = false;
            //    }
            //    //Contacto, Teléfono,	Referencia de dirección, Descripción de la visita.
            //    if (txtTextoContactoVisita.Text.Equals(""))
            //       {
            //          if (!strMsg.Equals("")) coma = ", ";
            //             strMsg = "Contacto";
            //       }
            //    if (txtTextTelefonosVisita.Text.Equals(""))
            //       {
            //          if (!strMsg.Equals("")) coma = ", ";
            //             strMsg = strMsg + coma + "Teléfono ";
            //             coma = "";
            //       }
            //    if (cmbTipoDocumento.SelectedValue.Equals("Z036")) //mtejada 21.11.2011
            //       {
            //          if (txtTextDescVisita.Text.Equals(""))
            //            {
            //               if (!strMsg.Equals("")) coma = ", ";
            //                  strMsg = strMsg + coma + "Descripción de la visita";
            //                  coma = "";
            //            }
            //        }
            //    if (txtTextoRefDireccion.Text.Equals(""))
            //       {
            //         if (!strMsg.Equals("")) coma = ", ";
            //             strMsg = strMsg + coma + "Referencia de dirección ";
            //             coma = "";
            //       }
            //        Session["Mensaje"] = "";
            //        if (!strMsg.Equals("") || !tienetipo ) 
            //        {
            //            pasa = false;
            //            Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrVisitaTextos1") + strMsg;
            //            if (!tienetipo && !strMsg.Equals(""))
            //            {
            //                Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrVisitaTextos2") + " " + Session["Mensaje"];
            //            }
            //            else if (!tienetipo && strMsg.Equals(""))
            //            {
            //                Session["Mensaje"] = ParametroBC.Instance.getParamValue("msgErrVisitaTextos2");
            //            }
            //        }

            //}
            #endregion
            string msjCliente = validarClientes();

            if (msjCliente != "")
            {
                Session["Mensaje"] = msjCliente;
                ((Site)Master).muestraMensajes();

            }
            else
            {

                PedidoBE pObjPed = (PedidoBE)Session["Pedido"];
                InterlocutorBE cAG = pObjPed.Interlocutores.Find(X => X.Funcion == "AG");
                InterlocutorBE cRG = pObjPed.Interlocutores.Find(X => X.Funcion == "RG");
                if (ddlRegion.SelectedValue != null)
                {
                    cRG.Region = ddlRegion.SelectedValue;
                }
                if (ddlPoblacion.SelectedItem != null)
                {
                    cRG.Poblacion = ddlPoblacion.SelectedItem.Text;
                }
                //RG = RESP. PAGO; AG = SOLICITANTE
                if (!ParametroBC.Instance.getParamValue("SectorVMS").Equals(pObjPed.Sector))
                {
                    if (cAG.Cliente.Ruc != "")
                    {
                        if (!chkRucDNI.Checked && cAG.Cliente.Ruc.Length != 11)
                        {
                            Session["Mensaje"] = "Verifique el RUC del solicitante.";
                            ((Site)Master).muestraMensajes();
                            return;
                        }
                        else if (chkRucDNI.Checked && cAG.Cliente.Ruc.Length != 8)
                        {
                            Session["Mensaje"] = "Verifique el DNI del solicitante.";
                            ((Site)Master).muestraMensajes();
                            return;
                        }

                    }
                    if (cRG.Cliente.Ruc != "")
                    {
                        if (!chkRucDNI.Checked && cRG.Cliente.Ruc.Length != 11)
                        {
                            Session["Mensaje"] = "Verifique el RUC del responsable de pago.";
                            ((Site)Master).muestraMensajes();
                            return;
                        }
                        else if (chkRucDNI.Checked && cRG.Cliente.Ruc.Length != 8)
                        {
                            Session["Mensaje"] = "Verifique el DNI del responsable de pago.";
                            ((Site)Master).muestraMensajes();
                            return;

                        }

                    }
                }
                if (this.cgvMateriales.Rows.Count == 0)
                {
                    Session["Mensaje"] = "No se ingresó posiciones al documento";
                    ((Site)Master).muestraMensajes();
                }
                else if (Convert.ToDateTime(txtFechaValidez.Text) < Convert.ToDateTime(txtFecha.Text))
                {
                    Session["Mensaje"] = "La fecha Fin Validez debe ser mayor a la Fecha Pedido";
                    ((Site)Master).muestraMensajes();
                }
                else
                {
                    if (Session["IndReferencia"] == "S")
                    {
                        try
                        {
                            UsuarioWebBE uWeb = new UsuarioWebBE();
                            uWeb = (UsuarioWebBE)HttpContext.Current.Session["UsuarioWeb"];
                            List<string> lstLote = new List<string>();
                            List<GenericBE> lstStatus = new List<GenericBE>();
                            GenericBE sta;
                            PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];
                            InterlocutorBE destMerc = pObjPedido.Interlocutores.Find(X => X.Funcion == "WE");
                            InterlocutorBE respPago = pObjPedido.Interlocutores.Find(X => X.Funcion == "AG");
                            InterlocutorBE entFin = pObjPedido.Interlocutores.Find(X => X.Funcion == "Z1");
                            string rpta = string.Empty;
                            foreach (GridViewRow row in this.cgvMateriales.Rows)
                            {
                                HiddenField lote = (HiddenField)row.FindControl("hidLote");
                                HiddenField pos = (HiddenField)row.FindControl("hidPosicion");
                                HiddenField status = (HiddenField)row.FindControl("hidStatus");
                                DetalleBE objDet = pObjPedido.Detalle.Find(X => X.Posicion == pos.Value);
                                DescuentoBE desFlete = objDet.LstCond.Find(X => X.Condicion == "YR02");
                                DescuentoBE desRecargo = objDet.LstCond.Find(X => X.Condicion == "YR01");
                                DescuentoBE desSeguro = objDet.LstCond.Find(X => X.Condicion == "YR03");
                                DescuentoBE desDcto = objDet.LstCond.Find(X => X.Condicion == "YD06");
                                DescuentoBE desPorc = objDet.LstCond.Find(X => X.Condicion == "YD05");
                                lstLote.Add(lote.Value);
                                sta = new GenericBE();
                                sta.Codigo = lote.Value;
                                sta.Descripcion = status.Value;
                                lstStatus.Add(sta);
                                List<string> respuesta = PedidoBC.Instance.CrearPedVtaVMS(pObjPedido.FechaEntrega, pObjPedido.Moneda, pObjPedido.CondPago,
                                uWeb.OrgVentas, uWeb.CanalDist, uWeb.sector, pObjPedido.CodCliente, pObjPedido.OrdenCompra, destMerc.Cliente.Codigo,
                                respPago.Cliente.Codigo, "Y01", "VE", uWeb.OfVentas, uWeb.PerNr, entFin.Cliente.Codigo,
                                pObjPedido.CodGrupoVend, desFlete != null ? desFlete.Importe.ToString() : "0.00", desRecargo != null ? desRecargo.Importe.ToString() : "0.00", desSeguro != null ? desSeguro.Importe.ToString() : "0.00",
                                desDcto != null ? desDcto.Importe.ToString() : "0.00", desPorc != null ? desPorc.Importe.ToString() : "0.00",
                                lstLote, lstStatus, uWeb.vstel, txtNumPedido.Text.Trim());
                                foreach (string s in respuesta)
                                {
                                    if (respuesta.Count() > 1)
                                    {
                                        rpta = "- " + s + "<br/>" + rpta;
                                    }
                                    else
                                    {
                                        rpta = s;
                                    }
                                }
                            }

                            if (rpta == "Se creó el pedido.")
                            {
                                Session.Remove("Operacion");
                                Session.Remove("Pedido");
                                Session.Remove("MaterialesList");
                                Session.Remove("ClienteEventual");
                                Session.Remove("Cliente");
                                Session.Remove("Interlocutores");
                                Session.Remove("ultimaPosAdd");
                                Session.Remove("RUCDNI");
                                this.limpiaPedido();
                                this.manejarBotonera();
                                tcMain.ActiveTabIndex = 0;

                                upBotones.Update();
                                upMain.Update();
                            }

                            foreach (GridViewRow dli in cgvMateriales.Rows)
                            {
                                ((TextBox)dli.FindControl("lblDescMaterial")).Enabled = true;
                            }
                            Session["Mensaje"] = rpta;

                        }
                        catch (Exception ex)
                        {
                            Session["Mensaje"] = ex.Message;
                        }
                        finally
                        {
                            ((Site)Master).muestraMensajes();
                        }
                    }
                    else
                    {
                        if (pasa)
                        {
                            if (!((string)Session["Operacion"]).Equals("editar"))
                                if (!documentoValido())
                                {
                                    upBotones.Update();
                                    upMain.Update();
                                    ((Site)Master).muestraMensajes();
                                    return;
                                }

                            string retval = "", numPedido = "", op = "";
                            bool modifOk = false;

                            //La funcion CargarDatosUsuarioWeb_a_Pedido pasa los datos del usuarioWeb a Pedido
                            PedidoBE objPedido = CargarDatosUsuarioWeb_a_Pedido(this._lvObjPedido);
                            //asignamos si se cargaron DNI o RUC
                            if (objPedido.Sector == "00")
                            {
                                if (Session["RUCDNI"] != null)
                                {
                                    objPedido.RUCDNI = Session["RUCDNI"].ToString();
                                }

                            }

                            if (Session["Operacion"] != null)
                            {
                                op = Session["Operacion"].ToString();
                            }
                            try
                            {
                                //--- tomar usuario de sesión
                                CredencialesController.Usuario = (UsuarioWebBE)Session["UsuarioWeb"];
                                //-----------------

                                switch (op.ToLower())
                                {
                                    case "editar":
                                        //------------------------------
                                        retval = PedidoBC.Instance.modificar(out modifOk, objPedido);
                                        break;
                                    case "crear":
                                    case "copiar":
                                        if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("Anticipo"))
                                        {
                                            retval = PedidoBC.Instance.crearPedidoAnticipo(out numPedido, objPedido);
                                        }
                                        else
                                        {
                                            objPedido.FechaFin = DateTime.Parse(txtFechaValidez.Text);
                                            retval = PedidoBC.Instance.procesarPedido(out numPedido, objPedido);
                                        }
                                        break;
                                }
                            }
                            catch (Exception ex)
                            {
                                //throw ex;
                                Session["Mensaje"] = ex.Message;
                            }
                            finally
                            {
                                tcMain.ActiveTabIndex = 1;
                                //verificar resultado:
                                if (!numPedido.Equals(""))
                                {
                                    //limpia sesion
                                    Session.Remove("Operacion");
                                    Session.Remove("Pedido");
                                    Session.Remove("MaterialesList");
                                    Session.Remove("ClienteEventual");
                                    Session.Remove("Cliente");
                                    Session.Remove("Interlocutores");
                                    Session.Remove("ultimaPosAdd");
                                    Session.Remove("RUCDNI");
                                    Session.Remove("lstRegion");
                                    this.limpiaPedido();
                                    this.manejarBotonera();
                                    if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("Anticipo"))
                                    {
                                        ibtnAddNuevoMat.Enabled = true;
                                        txtCodNuevoMat.ReadOnly = false;
                                        txtDescNuevoMat.ReadOnly = false;
                                        txtCantNuevoMat.ReadOnly = false;
                                    }
                                    //--- borrar vendedor web
                                    //txtCodVendedorWeb.Text = string.Empty;
                                    //txtNomVendedorWeb.Text = string.Empty;
                                    //--- poner nro de pedido generado en el campo num pedido
                                    txtNumPedido.Text = numPedido;

                                    //--- mostrar mensaje de creación
                                    if (pedConMatServ)
                                    {
                                        retval += ParametroBC.Instance.getParamValue("msgPedConServ");
                                    }
                                    Session["Mensaje"] = retval;

                                    tcMain.ActiveTabIndex = 0;


                                }
                                //si es una edición de pedido y todo salió ok, retval viene vacío...
                                if (op.ToLower() == "editar")
                                {
                                    //if (retval.Equals(""))
                                    if (modifOk)
                                    {

                                        //limpia sesion
                                        Session.Remove("Operacion");
                                        Session.Remove("Pedido");
                                        Session.Remove("MaterialesList");
                                        Session.Remove("ClienteEventual");
                                        Session.Remove("Cliente");
                                        Session.Remove("Interlocutores");
                                        Session.Remove("ultimaPosAdd");
                                        Session.Remove("ClienteBloqueado");
                                        Session.Remove("PedidoTratado");
                                        this.limpiaPedido();
                                        this.manejarBotonera();
                                        //--- borrar vendedor web
                                        //txtCodVendedorWeb.Text = string.Empty;
                                        //txtNomVendedorWeb.Text = string.Empty;

                                        //Session["Mensaje"] = "Doc. de venta " + objPedido.NumPedido + " se ha grabado.";
                                        if (pedConMatServ)
                                        {
                                            retval += ParametroBC.Instance.getParamValue("msgPedConServ");
                                        }
                                        Session["Mensaje"] = retval;

                                        tcMain.ActiveTabIndex = 0;
                                    }
                                }

                                Session["Mensaje"] = retval != "" ? retval : Session["Mensaje"];

                                upBotones.Update();
                                upMain.Update();
                                ((Site)Master).muestraMensajes();
                            }
                        }
                        else
                        {
                            upBotones.Update();
                            upMain.Update();
                            ((Site)Master).muestraMensajes();
                        }
                    }
                }
            }
        }

        protected void btnActualizar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                PedidoBE pObjPedido = (PedidoBE)Session["Pedido"];
                foreach (GridViewRow dli in cgvMateriales.Rows)
                {
                    //eliminar items
                    CheckBox chkBorrar = (CheckBox)dli.FindControl("chkBorrar");
                    if (chkBorrar != null && chkBorrar.Checked)
                    {
                        HiddenField hidPosicion = (HiddenField)dli.FindControl("hidPosicion");
                        if (hidPosicion != null)
                        {
                            DetalleBE obj = pObjPedido.Detalle.Find(X => X.Posicion == hidPosicion.Value);
                            if (obj != null)
                            {
                                pObjPedido.Detalle.Remove(obj);
                                pObjPedido.Detalle.RemoveAll(X => X.PosSup == obj.Posicion);
                            }
                        }
                    }
                    //--- fin eliminación
                }
                UsuarioWebBE uw = new UsuarioWebBE();
                if (Session["UsuarioWeb"] != null)
                {
                    uw = (UsuarioWebBE)Session["UsuarioWeb"];
                }
                if (uw.sector == "00")
                {
                    Session["RUCDNI"] = chkRucDNI.Checked == true ? "X" : "";
                }
                //Dcto de gerencia
                if (txtNroPedCliente.Text != string.Empty)
                {
                    decimal dctoGerencia = Convert.ToDecimal(txtNroPedCliente.Text);
                    DescuentoBE lst = new DescuentoBE();
                    lst.Importe = dctoGerencia;
                    //lst.Valor = pObjPedido.Total * (dctoGerencia / 100);
                    lst.Valor = dctoGerencia;
                    lst.Condicion = "ZD05";
                    List<DescuentoBE> lstD = new List<DescuentoBE>();
                    lstD = pObjPedido.LstCond;
                    DescuentoBE lstF = lstD.Find(X => X.Condicion == "ZD05");
                    if (lstF == null)
                    {
                        pObjPedido.LstCond.Add(lst);
                    }
                    else
                    {
                        lstF.Importe = dctoGerencia;
                        //lstF.Valor = pObjPedido.Total * (dctoGerencia / 100);
                        lstF.Valor = dctoGerencia;
                    }
                }
                //--------------------------------------------------
                Session["Pedido"] = pObjPedido;
                this.buscaPrecios();
                tcMain.ActiveTabIndex = 1;
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnFlujo_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string _lpNumPedido = txtNumPedido.Text.Trim();
                if (_lpNumPedido.Equals(string.Empty) || _lpNumPedido.Equals("0000000000"))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que desea consultar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + _lpNumPedido + "',null,'width=1000,height=500,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "SEGUIMIENTO", str, false);
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnImprimir_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que desea imprimir.";
                    txtNumPedido.Focus();
                }
                else
                {
                    if (!rblTiposImpresion.SelectedValue.Equals(""))
                    {
                        UsuarioWebBE uw = new UsuarioWebBE();
                        if (Session["UsuarioWeb"] != null)
                        {
                            uw = (UsuarioWebBE)Session["UsuarioWeb"];
                        }

                        PedidoBE pObjPedido = PedidoBC.Instance.leer(txtNumPedido.Text.Trim(), uw);

                        if (pObjPedido != null)
                        {
                            if (uw.sector == "00")
                            {
                                mpeImpresion.Enabled = false;
                            }
                            Session["PedidoImpr"] = pObjPedido;
                            //imprimir
                            string imprPage = "";
                            switch (rblTiposImpresion.SelectedValue)
                            {
                                case "0":
                                    imprPage = "Impresion/CotizacionPopup.aspx";
                                    Session["NroCotizacion"] = txtNumPedido.Text.Trim();
                                    break;
                                case "1":
                                    imprPage = "Impresion/OfertaSimplePopup.aspx";
                                    Session["CodigoOferta"] = txtNumPedido.Text.Trim();
                                    break;
                                case "2":
                                    imprPage = "Impresion/OfertaTecnicaPopup.aspx";
                                    Session["CodigoOferta"] = txtNumPedido.Text.Trim();
                                    break;
                                default:
                                    Session["Mensaje"] = "Debe seleccionar un tipo de impresión válida.";
                                    break;
                            }
                            if (!string.IsNullOrEmpty(imprPage))
                            {
                                //string str = string.Empty;
                                //string script = string.Empty;
                                //script = "<script type='text/javascript'>" +
                                //            "window.open('{0}?np={1}','','width=840,height=750,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');";
                                //script += "</script>";
                                //str = string.Format(script, imprPage, pObjPedido.NumPedido);
                                //ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "IMPRIMIR", str, false);

                                string script = "abrirImpresionDocumento('" + imprPage + "');";
                                System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion", script, true);

                            }
                        }
                        else
                        {
                            Session["Mensaje"] = "No se encontró el Doc de Ventas";
                            txtNumPedido.Focus();
                        }
                    }
                    else
                    {
                        Session["Mensaje"] = "Debe seleccionar un tipo de impresión válida.";
                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            //finally
            //{
            //    ((Site)Master).muestraMensajes();
            //    upBotones.Update();
            //    upMain.Update();
            //}
        }

        protected void btnCrear_Click(object sender, ImageClickEventArgs e)
        {
            this.Nuevo();
        }

        protected void Nuevo()
        {
            try
            {
                try
                {
                    ddlRegion.Enabled = true;
                    ddlPoblacion.Enabled = true;
                    ddlRegion.SelectedIndex = 0;
                    ddlPoblacion.SelectedIndex = 0;
                }
                catch 
                {
                    
                }
                

                string pTipoDoc = cmbTipoDocumento.SelectedValue;
                this.Cancelar();
                txtNumPedido.Text = string.Empty;
                txtNumPedido.ReadOnly = true;

                Session["Operacion"] = "crear";
                this.manejarBotonera();
                this.textosVisibles();
                tcMain.ActiveTabIndex = 0;
                UsuarioWebBE objUsW = (UsuarioWebBE)Session["UsuarioWeb"];
                string pMatAnticipo = string.Empty;
                if (objUsW.sector.Equals("01")) { pMatAnticipo = ParametroBC.Instance.getParamValue("MatAnticipo"); }
                else { pMatAnticipo = ParametroBC.Instance.getParamValue("MatAnticipoRep"); }
                if (pTipoDoc == ParametroBC.Instance.getParamValue("Anticipo"))// && objUsW.sector == "01")
                {
                    this.guardaPedido();
                    decimal cant = Convert.ToDecimal("1");
                    //string retVal = this.addItem(ParametroBC.Instance.getParamValue("MatAnticipo"), cant);
                    string retVal = this.addItem(pMatAnticipo, cant);

                    if (retVal.Equals(""))
                    {
                        ////this._lvObjPedido = (PedidoBE)Session["Pedido"];
                        this.buscaPrecios();
                        ibtnAddNuevoMat.Enabled = false;
                        txtCodNuevoMat.ReadOnly = true;
                        txtDescNuevoMat.ReadOnly = true;
                        txtCantNuevoMat.ReadOnly = true;
                    }
                    else
                    {
                        //mensaje de error
                        Session["Mensaje"] = retVal;
                        ibtnAddNuevoMat.Enabled = false;
                        txtCodNuevoMat.ReadOnly = true;
                        txtDescNuevoMat.ReadOnly = true;
                        txtCantNuevoMat.ReadOnly = true;
                    }
                }
                else
                {
                    ibtnAddNuevoMat.Enabled = true;
                    txtCodNuevoMat.ReadOnly = false;
                    txtDescNuevoMat.ReadOnly = false;
                    txtCantNuevoMat.ReadOnly = false;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
                tcMain.Enabled = false;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                //upBotones.Update();
                //upMain.Update();
            }
        }

        protected void btnEditar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que se quiere editar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    //preguntamos si no hay datos para region y pobblacion
                    if (Session["lstRegion"] == null && Session["lstPoblacion"] == null)
                    {
                        List<GenericBE> lstRegion = new List<GenericBE>();
                        List<DECOR.BL.BE.PoblacionBE> lstPoblacion = new List<DECOR.BL.BE.PoblacionBE>();
                        if (Session["lstRegion"] == null)
                        {
                            ParametroBC.Instance.getDatosUbicación(out lstRegion, out lstPoblacion);

                            ddlRegion.DataValueField = "Codigo";
                            ddlRegion.DataTextField = "Descripcion";
                            ddlRegion.DataSource = lstRegion;
                            ddlRegion.DataBind();

                            ddlPoblacion.DataValueField = "Codigo";
                            ddlPoblacion.DataTextField = "Descripcion";
                            ddlPoblacion.DataSource = lstPoblacion;
                            ddlPoblacion.DataBind();

                            Session["lstRegion"] = lstRegion;
                            Session["lstPoblacion"] = lstPoblacion;
                        }
                    }
                    else
                    {
                        List<GenericBE> lstRegion = new List<GenericBE>();
                        List<DECOR.BL.BE.PoblacionBE> lstPoblacion = new List<DECOR.BL.BE.PoblacionBE>();

                        ddlRegion.DataValueField = "Codigo";
                        ddlRegion.DataTextField = "Descripcion";
                        ddlRegion.DataSource = (List<GenericBE>)Session["lstRegion"];
                        ddlRegion.DataBind();

                        ddlPoblacion.DataValueField = "Codigo";
                        ddlPoblacion.DataTextField = "Descripcion";
                        ddlPoblacion.DataSource = (List<PoblacionBE>)Session["lstPoblacion"];
                        ddlPoblacion.DataBind();
                    }


                    //cargar info del pedido para editarla.
                    this.cargarPedido(txtNumPedido.Text.Trim(), "editar");
                    this._lvObjPedido = (PedidoBE)Session["Pedido"];
                    Session["Pedido"] = this._lvObjPedido;
                    this.textosVisibles();
                }
                tcMain.ActiveTabIndex = 1;
            }
            catch (Exception ex)
            {
                tcMain.Enabled = false;
                if (((string)Session["Mensaje"]) == "")
                {
                    Session["Mensaje"] = ex.Message;
                }
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        private void deshabilitarVisualizacion(Boolean op)
        {

            string o = string.Empty;
            btnGrabar.Enabled = op;

            if (Session["Operacion"] != null)
            {
                o = Session["Operacion"].ToString();
            }
            cmbMoneda.Enabled = op;
            txtFechaValidez.Enabled = op;
            txtFecha.Enabled = op;
            ibtnAddNuevoMat.Enabled = op;

            ClienteBE objC = new ClienteBE();
            if (Session["Cliente"] != null)
            {
                objC = (ClienteBE)Session["Cliente"];
            }
            if (objC.nif == "0000000001")
            {
                txtCodSolicitante.Enabled = true;
                txtNomSolicitante.Enabled = true;
                txtDirSolicitante.Enabled = true;
                txtTelSolicitante.Enabled = true;
                txtNifSolicitante.Enabled = true;
            }
            else
            {
                txtCodSolicitante.Enabled = op;
                txtNomSolicitante.Enabled = op;
                txtDirSolicitante.Enabled = op;
                txtTelSolicitante.Enabled = op;
                txtNifSolicitante.Enabled = op;
            }


            txtCodDestFact.Enabled = op;
            txtNomDestFact.Enabled = op;
            txtDirDestFact.Enabled = op;
            txtTelDestFact.Enabled = op;

            txtCodResPago.Enabled = op;
            txtNomResPago.Enabled = op;
            txtDirResPago.Enabled = op;
            txtTelResPago.Enabled = op;
            txtNifResPago.Enabled = op;

            txtCodVendedor1.Enabled = false;
            txtNomVendedor1.Enabled = false;

            btnCancel.Enabled = true;
            btnActualizar.Enabled = op;
            btnGrabar.Enabled = op;
            btnEditar.Enabled = op;
            btnCrear.Enabled = op;
            //---
            btnFacturar.Enabled = op;
            btnReenumerar.Enabled = op;

            txtNumPedido.ReadOnly = op;
            //cmbTipoDocumento.Enabled = op;

            btnImprimir.Enabled = true;
            //cmbTipoDocumento.Enabled = op;
            tcMain.Enabled = true;
            //-------------------------------------------
            // habilito el link para ver a los interlocutores pero deshabilito a cada uno de los campos del popup
            lnkShowPopUpInt.Enabled = true;
            txtNifResPago.Enabled = op;
            txtTelResPago.Enabled = op;
            txtDirResPago.Enabled = op;
            txtNomResPago.Enabled = op;
            txtCodResPago.Enabled = op;
            txtTelDestFact.Enabled = op;
            txtDirDestFact.Enabled = op;
            txtNomDestFact.Enabled = op;
            txtCodDestFact.Enabled = op;
            txtTelDestMerc.Enabled = op;
            txtDirDestMerc.Enabled = op;
            txtNomDestMerc.Enabled = op;
            txtCodDestMerc.Enabled = op;
            //txtNifSolicitante.Enabled = op;
            //txtDirSolicitante.Enabled = op;
            //txtNomSolicitante.Enabled = op;
            //txtCodSolicitante.Enabled = op;

            btnImprimir.ImageUrl = "~/img/print.png";
            btnCrear.ImageUrl = "~/img/new.dis.png";
            btnEditar.ImageUrl = "~/img/edit.dis.png";
            btnGrabar.ImageUrl = "~/img/save.dis.png";
            btnGrabar.ImageUrl = "~/img/save.dis.png";
            btnCancel.ImageUrl = "~/img/cancel.png";
            btnActualizar.ImageUrl = "~/img/update.dis.png";

            btnReenumerar.ImageUrl = "~/img/reenumerar.dis.png";
            btnFacturar.ImageUrl = "~/img/facturar.dis.png";

            txtCodVendedor1.Enabled = false;
            txtNomVendedor1.Enabled = false;
        }

        protected void btnVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que se quiere editar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    //cargar info del pedido para editarla.
                    this.cargarPedido(txtNumPedido.Text.Trim(), "ver");
                    this.textosVisibles();
                }
                tcMain.ActiveTabIndex = 1;
            }
            catch (Exception ex)
            {
                tcMain.Enabled = false;
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnCancel_Click(object sender, ImageClickEventArgs e)
        {
            this.Cancelar();
        }

        protected void Cancelar()
        {
            try
            {
                //limpia sesion
                Session.Remove("Operacion");
                Session.Remove("Pedido");
                Session.Remove("MaterialesList");
                Session.Remove("ClienteEventual");
                Session.Remove("Cliente");
                Session.Remove("Interlocutores");
                Session.Remove("ultimaPosAdd");
                Session.Remove("ClienteBloqueado");
                Session.Remove("PedidoTratado");
                Session.Remove("planFact");
                Session.Remove("IndReferencia");

                Session.Remove("codServicio");
                //tcMain.Enabled = false;
                //-----

                tpAprob.Visible = true;
                tpAprob.Enabled = true;
                tpGerencia.Visible = true;
                tpGerencia.Enabled = true;
                tpGlosa.Enabled = true;
                tpGlosa.Visible = true;
                tpObservaciones.Enabled = true;
                tpObservaciones.Visible = true;
                tpReferencia.Enabled = true;
                this.deshabilitarVisualizacion(true);
                this.manejarBotonera();
                this.limpiaPedido();

                foreach (GridViewRow dli in cgvMateriales.Rows)
                {
                    ((TextBox)dli.FindControl("lblDescMaterial")).Enabled = true;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        private void manejarBotonera()
        {
            string op = "";
            if (Session["Operacion"] != null)
            {
                op = Session["Operacion"].ToString().ToLower();
                switch (op)
                {
                    case "crear":
                    case "editar":
                    case "ver":
                    case "copiar":
                        btnGrabar.Enabled = true;
                        btnGrabar.ImageUrl = "~/img/save.png";
                        btnCancel.Enabled = true;
                        btnCancel.ImageUrl = "~/img/cancel.png";
                        btnActualizar.Enabled = true;
                        btnActualizar.ImageUrl = "~/img/update.png";
                        btnEditar.Enabled = false;
                        //---
                        btnEditar.Enabled = false;
                        btnEditar.ImageUrl = "~/img/edit.dis.png";
                        btnCrear.Enabled = false;
                        btnCrear.ImageUrl = "~/img/new.dis.png";
                        btnVisualizar.Enabled = false;
                        //---
                        btnFacturar.Enabled = false;
                        btnFacturar.ImageUrl = "~/img/facturar.dis.png";
                        btnReenumerar.Enabled = false;
                        btnReenumerar.ImageUrl = "~/img/reenumerar.dis.png";

                        btnImprimir.Enabled = false;
                        btnImprimir.ImageUrl = "~/img/print.dis.png";
                        btnFlujo.Enabled = false;
                        btnFlujo.ImageUrl = "~/img/flujo.dis.png";
                        //---
                        txtNumPedido.ReadOnly = true;
                        lnkShowPopUpInt.Enabled = true;
                        tcMain.Enabled = true;
                        tcMain.TabIndex = 0;
                        ibtnAddNuevoMat.Enabled = true;
                        cmbTipoDocumento.Enabled = false;
                        //---
                        break;
                    default:
                        btnGrabar.Enabled = false;
                        btnGrabar.ImageUrl = "~/img/save.dis.png";
                        btnCancel.Enabled = false;
                        btnCancel.ImageUrl = "~/img/cancel.dis.png";
                        btnActualizar.Enabled = false;
                        btnActualizar.ImageUrl = "~/img/update.dis.png";
                        btnVisualizar.Enabled = false;
                        //---
                        btnEditar.Enabled = true;
                        btnEditar.ImageUrl = "~/img/edit.png";
                        btnCrear.Enabled = true;
                        btnCrear.ImageUrl = "~/img/new.png";
                        btnImprimir.Enabled = true;
                        btnImprimir.ImageUrl = "~/img/print.png";
                        btnFlujo.Enabled = true;
                        btnFlujo.ImageUrl = "~/img/flujo.png";
                        //---
                        btnFacturar.Enabled = false;
                        btnFacturar.ImageUrl = "~/img/facturar.dis.png";
                        btnReenumerar.Enabled = false;
                        btnReenumerar.ImageUrl = "~/img/reenumerar.dis.png";

                        txtNumPedido.ReadOnly = false;
                        tcMain.Enabled = false;
                        tcMain.TabIndex = 0;
                        //---
                        cmbTipoDocumento.Enabled = true;
                        break;
                }
                UsuarioWebBE user = (UsuarioWebBE)Session["UsuarioWeb"];
                if (op == "editar")
                {
                    cmbTipoDocumento.Enabled = false;

                    if (user.sector != "01")
                    {
                        //txtNroPedCliente.ReadOnly = true;
                        txtNroPedCliente.ReadOnly = true;
                        txtFechaValidez.ReadOnly = true;
                    }
                    else
                    {
                        //txtNroPedCliente.ReadOnly = false;
                        //txtNroPedCliente.ReadOnly = false;
                        txtFechaValidez.ReadOnly = false;
                    }

                    this.bloquearCliente(true); this.bloquearInterl(true);
                    //txtCodCliente.Enabled = false; txtNomCliente.Enabled = false;
                    //txtCodDestFact.Enabled = false; txtNomDestFact.Enabled = false; txtDirDestFact.Enabled = false; txtTelDestFact.Enabled = false;
                    //txtCodDestMerc.Enabled = false; txtNomDestMerc.Enabled = false; txtDirDestMerc.Enabled = false; txtTelDestMerc.Enabled = false;
                    //txtCodResPago.Enabled = false; txtNomResPago.Enabled = false; txtDirResPago.Enabled = false; txtTelResPago.Enabled = false; txtNifResPago.Enabled = false;

                    //---- adicional
                    //if (ParametroBC.Instance.esTipoX(this.cmbTipoDocumento.SelectedValue, "DocRepuestos"))
                    //{
                    cmbCondicionesPago.Enabled = false;
                    txtNroPedCliente.ReadOnly = true;
                    txtFechaValidez.ReadOnly = true;
                    cmbMoneda.Enabled = false;
                    //}
                }
                else if (op.Equals("crear"))
                {
                    //cmbTipoDocumento.Enabled = true;

                    cmbCondicionesPago.Enabled = true;
                    txtNroPedCliente.ReadOnly = false;
                    txtFechaValidez.ReadOnly = false;
                    cmbMoneda.Enabled = true;

                    this.bloquearCliente(false); this.bloquearInterl(false);
                }
                else if (op.Equals("ver"))
                {
                    txtCodCliente.ReadOnly = true;
                    txtNomCliente.ReadOnly = true;
                    txtNomEntFinanciera.ReadOnly = true;
                    txtCodEntFinanciera.ReadOnly = true;
                    cmbCondicionesPago.Enabled = false;
                    txtNroPedCliente.ReadOnly = true;
                    //tpAprob.Enabled = false;
                    //tbAnticipo.Enabled = false;
                    //tpReferencia.Enabled = false;
                    //tpObservaciones.Enabled = false;
                    //tpGlosa.Enabled = false;
                    //tpGerencia.Enabled = false;
                    //tpAprob.Enabled = false;
                }
                //----
            }
            else
            {
                btnGrabar.Enabled = false;
                btnGrabar.ImageUrl = "~/img/save.dis.png";
                btnCancel.Enabled = false;
                btnCancel.ImageUrl = "~/img/cancel.dis.png";
                btnActualizar.Enabled = false;
                btnActualizar.ImageUrl = "~/img/update.dis.png";
                //---
                btnEditar.Enabled = true;
                btnEditar.ImageUrl = "~/img/edit.png";
                btnCrear.Enabled = true;
                btnCrear.ImageUrl = "~/img/new.png";
                btnImprimir.Enabled = true;
                btnImprimir.ImageUrl = "~/img/print.png";
                btnFlujo.Enabled = true;
                btnFlujo.ImageUrl = "~/img/flujo.png";

                btnVisualizar.Enabled = true;

                btnFacturar.Enabled = true;
                btnFacturar.ImageUrl = "~/img/facturar.png";
                btnReenumerar.Enabled = true;
                btnReenumerar.ImageUrl = "~/img/reenumerar.png";
                //---
                txtNumPedido.ReadOnly = false;
                tcMain.Enabled = false;

                tcMain.TabIndex = 0;
                //---
                cmbTipoDocumento.Enabled = true;
            }
        }
        #endregion

        //asignar condiciones de la sesión
        private void CargarDescuentos(GridViewRow row, DetalleBE objItem)
        {
            Panel pnlDctoTotal = (Panel)row.FindControl("pnlDctoTotal");
            HtmlTable tblDescuentos = (HtmlTable)pnlDctoTotal.FindControl("tblDescuentos");

            HiddenField hidClaseCondicion;
            TextBox txtImporte;
            Label lblValor; DescuentoBE objDctoBE = null;

            string varHidClaseCondicion;
            string varTxtImporte;
            string varLblValor;

            for (int i = 0; i < tblDescuentos.Rows.Count; i++)
            {
                varHidClaseCondicion = "hidClaseCondicion" + i.ToString();
                varTxtImporte = "txtImporte" + i.ToString();
                varLblValor = "lblValor" + i.ToString();

                hidClaseCondicion = (HiddenField)tblDescuentos.FindControl(varHidClaseCondicion);
                txtImporte = (TextBox)tblDescuentos.FindControl(varTxtImporte);
                lblValor = (Label)tblDescuentos.FindControl(varLblValor);

                objDctoBE = objItem.LstCond.Find(X => X.Condicion == hidClaseCondicion.Value);
                if (objDctoBE != null)
                {
                    txtImporte.Text = objDctoBE.Importe.ToString();
                    lblValor.Text = objDctoBE.Valor.ToString();
                }
            }
        }

        /// <summary>
        /// Asigna los valores de UsuarioWeb al objeto Pedido
        /// </summary>
        /// <param name="objPedido">Objeto Pedido</param>
        /// <returns></returns>
        private PedidoBE CargarDatosUsuarioWeb_a_Pedido(PedidoBE objPedido)
        {
            UsuarioWebBE uw = new UsuarioWebBE();

            if (Session["UsuarioWeb"] != null)
            {
                uw = (UsuarioWebBE)Session["UsuarioWeb"];
                objPedido.CanalDist = uw.CanalDist;
                objPedido.OrgVentas = uw.OrgVentas;
                objPedido.Sector = uw.sector;
                objPedido.Sociedad = uw.sociedad;
                objPedido.CodOficina = uw.OfVentas;
                objPedido.UsuarioCreacion = uw.Usuario;
                objPedido.IGV = uw.IGV;
                objPedido.CodGrupoVend = uw.GrpVend;
                objPedido.caja = uw.vstel;
                objPedido.turno = uw.turno;
                objPedido.boveda = uw.boveda;
                foreach (DetalleBE item in objPedido.Detalle)
                {
                    item.CodCentro = uw.centro;
                    item.CodAlmacen = uw.almacen;
                    item.PuestoExp = uw.vstel;
                }
            }
            return objPedido;
        }

        protected void cgvMateriales_DataBound(object sender, EventArgs e)
        {

        }


        /*****************************************************/
        /*****************************************************/
        /*******************CODIGO AGREGADO*******************/
        protected void btnFacturar_Click(object sender, EventArgs e)
        {
            try
            {
                string tipo = "";
                string tienecierre = "";
                UsuarioWebBE uWeb = new UsuarioWebBE();
                uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                CierreBC.Instance.Get_TieneCierre(uWeb.vstel, DateTime.Now.AddDays(-1), out tipo);
                CierreBC.Instance.Get_TieneCierre(uWeb.vstel, DateTime.Now, out tienecierre);
                if (tipo.Equals("E"))
                {
                    Session["Mensaje"] = "No se realizó el cierre del día anterior.";

                }
                else if (tienecierre.Equals("S"))
                {
                    Session["Mensaje"] = "La caja ya tiene un cierre en el día.";

                }
                else if (txtNumPedido.Text.Trim().Equals(string.Empty))
                {
                    Session["Mensaje"] = "Debe ingresar el número de documento comercial que se quiere editar.";
                    txtNumPedido.Focus();
                }
                else
                {
                    UsuarioWebBE uw = new UsuarioWebBE();
                    uw = (UsuarioWebBE)Session["UsuarioWeb"];
                    PedidoBE objP = PedidoBC.Instance.leer(txtNumPedido.Text.Trim(), uw);
                    if (objP == null)
                    {
                        Session["Mensaje"] = "No se encontró el Doc de Ventas";
                    }
                    else
                    {
                        if (objP.CodTipoDoc == "YC02")
                        {
                            Session["Mensaje"] = "El documento no puede ser facturado.";
                        }
                        else
                        {
                            if (!objP.Tratado)
                            {
                                List<ValidacionStock> lstV = new List<ValidacionStock>();
                                if (objP.CodTipoDoc != "Z013")
                                {
                                    lstV = PedidoBC.Instance.validacionStock(txtNumPedido.Text.Trim().PadLeft(10, '0'));
                                }

                                if (lstV.Count <= 0)
                                {
                                    Session["Pedido"] = objP;

                                    this.pagoControl.NroPedido = txtNumPedido.Text.Trim();
                                    this.pagoControl.TipoCambio = ParametroBC.Instance.getTipoCambio();
                                    this.pagoControl.CargarDatos();
                                    this.mpeMedioPago.Show();
                                }
                                else
                                {
                                    GridViewVisualizacionStock.DataSource = lstV;
                                    GridViewVisualizacionStock.DataBind();
                                    mpeVisualizacionStock.Show();
                                }
                            }
                            else
                            {
                                Session["Mensaje"] = "El documento ya ha sido facturado y/o concluido.";
                            }
                        }

                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnReenumerar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                txtnew.Text = "";
                txtold.Text = "";
                lblResult.Text = "";
                List<GenericBE> lstTipofac = new List<GenericBE>();

                string folio = "", claseDoc = "", tipo = "";
                Session["primerFolio"] = null;
                if (txtNumPedido.Text.Trim() == "")
                {
                    Session["Mensaje"] = "Ingrese un número de documento válido.";
                }
                else
                {
                    ParametroBC.Instance.getFolioClaseDocumentoPedFac(txtNumPedido.Text, out folio, out claseDoc, out tipo);
                    txtold.Text = folio;
                    Session["Folio"] = folio;
                    Session["ClaseDoc"] = claseDoc;
                    Session["Tipo"] = tipo;

                    int TipoApp = Convert.ToInt16(ParametroBC.Instance.getParamValue("TipoApp"));
                    //1 = app online // 0 = app offline
                    if (TipoApp == 1)
                    {
                        UsuarioWebBE objU = (UsuarioWebBE)Session["UsuarioWeb"];
                        List<LibrosxvstelBE> lstLibrosxvstel = (List<LibrosxvstelBE>)Session["librosxvstel"];

                        foreach (LibrosxvstelBE item in lstLibrosxvstel)
                        {
                            if (item.Vstel.Equals(objU.vstel) && tipo.Equals(item.Invtp))
                            {
                                this.txtoldfijo.Text = tipo + "-" + item.Rgtno;
                                this.txtnewfijo.Text = tipo + "-" + item.Rgtno;
                                Session["primerFolio"] = tipo + "-" + item.Rgtno;
                                break;
                            }
                        }
                    }
                    else if (TipoApp == 0)
                    {
                        UsuarioWebBE objU = (UsuarioWebBE)Session["UsuarioWeb"];
                        this.txtoldfijo.Text = tipo + "-" + objU.Libro;
                        this.txtnewfijo.Text = tipo + "-" + objU.Libro;

                    }


                    this.mpeReenumerar.Show();
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
                upBotones.Update();
                upMain.Update();
            }
        }

        protected void btnGuardarReenumerar_Click(object sender, ImageClickEventArgs e)
        {
            UsuarioWebBE objU = (UsuarioWebBE)Session["UsuarioWeb"];
            
            Session["Folio"] = txtnew.Text;
            string nroPedido = txtNumPedido.Text.Trim();
            string folio = Session["Folio"].ToString();
            string claseDoc = Session["ClaseDoc"].ToString();
            string tipo = Session["Tipo"].ToString();
            lblResult.Text = "";
            if (PedidoBC.Instance.Reenumerar(Convert.ToInt32(txtold.Text), Convert.ToInt32(txtnew.Text), objU.vstel,
               tipo, nroPedido, out nroPedido))
            {
                //Session["NroPedido"] = nroPedido;
                if (Session["primerFolio"] != null)
                {
                    
                    Session["Folio"] = ((string)Session["primerFolio"]) + "-" + folio;                    
                }
                Session["NroFolio"] = folio;
                if (claseDoc != "Z013")
                {
                    Session["NroPedido"] = nroPedido;
                    System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion",
                                    "mostrarImpresionTicket();", true);
                }
                else
                {
                    Session["NroFactura"] = nroPedido;
                    if (Session["primerFolio"] != null)
                    {
                        Session["Folio"] = ((string)Session["primerFolio"]) + "-" + folio;
                    }
                    Session["NroFolio"] = folio;
                    System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion",
                                    "mostrarImpresionAnticipo();", true);
                }
            }
            else
            {
                lblResult.Text = "Error en la reenumeración, verifique número de folio antiguo y tipo de documento o que el documento seleccionado no tenga ENTREGA";
            }
        }

        protected void ddltipodoc_SelectedIndexChanged(object sender, EventArgs e)
        {
            UsuarioWebBE objU = (UsuarioWebBE)Session["UsuarioWeb"];
            int ind = ddltipodoc.SelectedValue.ToString().IndexOf('-');
            this.txtoldfijo.Text = this.ddltipodoc.SelectedValue.ToString().Substring(0, ind) + "-" + objU.Libro;
            this.txtnewfijo.Text = this.ddltipodoc.SelectedValue.ToString().Substring(0, ind) + "-" + objU.Libro;
        }

        /*******************************AGREGADO CARACTERISTICAS**************************************/

        protected void CargarCaracteristicas(string codMaterial, string posicion, string lote)
        {
            try
            {
                string tmpPos = posicion;
                Dictionary<string, List<GenericBE>> dict = (Dictionary<string, List<GenericBE>>)Session["CargarCombos"];
                this.ddlCColor.DataValueField = "Codigo";
                this.ddlCColor.DataTextField = "Descripcion";
                this.ddlCColor.DataSource = dict["color"].ToList();
                this.ddlCColor.DataBind();

                List<GenericBE> caracteristica = new List<GenericBE>(); //llamar a metodo de bc
                caracteristica = MaterialBC.Instance.caracteristicaMat(codMaterial, lote);

                if (caracteristica.Count > 0)
                {
                    foreach (GenericBE obj in caracteristica)
                    {
                        if (obj.Codigo == "ZMOD_MOTOR")
                        {
                            this.txtCModeloMotor.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZMARCA_MOTOR")
                        {
                            this.txtCMarcaMotor.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZTIPO_CARROCERIA")
                        {
                            this.txtCTipoCarroceria.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZNUM_CILINDRO")
                        {
                            this.txtCCilindros.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZFOR_RODANTE")
                        {
                            this.txtCFormulaRodante.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZTRANSMISION")
                        {
                            this.txtCTransmision.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZPOTENCIAC")
                        {
                            this.txtCPotenciaContinua.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZPOTENCIAE")
                        {
                            this.txtCPotenciaEmergencia.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZVERSION")
                        {
                            this.txtCVersion.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZCILINDRADA")
                        {
                            this.txtCCilindrada.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZNUM_RUEDAS")
                        {
                            this.txtCNumeroRuedas.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZNUM_ASIENTO")
                        {
                            this.txtCNumeroAsiento.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZLONGITUD ")
                        {
                            this.txtCLongitud.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZEJE")
                        {
                            this.txtCEjes.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZANCHO")
                        {
                            this.txtCAncho.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZALTURA")
                        {
                            this.txtCAltura.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZCOMBUSTIBLE")
                        {
                            this.txtCCombustible.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZPESO_BRUTO")
                        {
                            this.txtCPesoBruto.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZPESO_NETO")
                        {
                            this.txtCPesoNeto.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZMOD_ALTERNADOR")
                        {
                            this.txtCModeloAlternador.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZREGULADOR")
                        {
                            this.txtCRegulador.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZVOL_ALTERNADOR")
                        {
                            this.txtCVoltajeAlternador.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZCATEGORIA")
                        {
                            this.txtCCategoria.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZPOTENCIA")
                        {
                            this.txtCPotenciaMotor.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZCARGA_UTIL")
                        {
                            this.txtCCargaUtil.Text = obj.Descripcion;
                        }
                        if (obj.Codigo == "ZNUM_PASAJERO")
                        {
                            this.txtCNumeroPasajero.Text = obj.Descripcion;
                        }
                        if (Session["IndReferencia"] == "S")
                        {
                            if (obj.Codigo == "ZCOLOR")
                            {
                                this.ddlCColor.SelectedValue = obj.Descripcion;
                            }
                            if (obj.Codigo == "ZANO_FABRICACION")
                            {
                                this.txtCAnioFabricacion.Text = obj.Descripcion;
                            }
                            if (obj.Codigo == "ZANO_MODELO")
                            {
                                this.txtCAnioModelo.Text = obj.Descripcion;
                            }
                        }
                    }

                    List<DetalleBE> lstDet = new List<DetalleBE>();
                    PedidoBE pedido = (PedidoBE)Session["Pedido"];
                    lstDet = pedido.Detalle;
                    DetalleBE objItem = lstDet.Find(delegate(DetalleBE objD) { return objD.Posicion == tmpPos; });
                    if (objItem.color != string.Empty && objItem.color != null)
                    {
                        ddlCColor.SelectedValue = objItem.color;
                    }
                    if (objItem.anniofab != string.Empty && objItem.anniofab != null)
                    {
                        txtCAnioFabricacion.Text = objItem.anniofab;
                    }
                    if (objItem.anniomod != string.Empty && objItem.anniomod != null)
                    {
                        txtCAnioModelo.Text = objItem.anniomod;
                    }
                    TextoBE lstPos7 = objItem.Textos.Find(X => X.CodTexto == "ZC07");
                    if (lstPos7 != null)
                    {
                        txtCAnioFabricacion.Text = lstPos7.Descripcion;
                    }
                    TextoBE lstPos9 = objItem.Textos.Find(X => X.CodTexto == "ZC09");
                    if (lstPos9 != null)
                    {
                        txtCAnioModelo.Text = lstPos9.Descripcion;
                    }

                    if (Session["IndReferencia"] == "S")
                    {
                        ddlCColor.Enabled = false;
                        txtCAnioFabricacion.Enabled = false;
                        txtCAnioModelo.Enabled = false;
                    }
                    else
                    {
                        ddlCColor.Enabled = true;
                        txtCAnioFabricacion.Enabled = true;
                        txtCAnioModelo.Enabled = true;
                    }


                    this.hfCodMaterial.Value = codMaterial;
                    this.hfCodPosicion.Value = posicion;
                    this.mpeCaracteristica.Show();
                }
                else
                {
                    Session["Mensaje"] = "El material no posee características";
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void btnAceptarCaracteristica_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                string codMaterial = this.hfCodMaterial.Value;
                string posicion = this.hfCodPosicion.Value;
                PedidoBE pedido = (PedidoBE)Session["Pedido"];

                List<DetalleBE> lstMat = new List<DetalleBE>();
                lstMat = pedido.Detalle;
                DetalleBE objDet = lstMat.Find(X => X.Posicion == posicion);
                objDet.color = this.ddlCColor.SelectedValue;

                TextoBE txtZC07 = new TextoBE();
                txtZC07.CodTexto = "ZC07";
                txtZC07.Descripcion = txtCAnioFabricacion.Text;
                txtZC07.Posicion = objDet.PosicionCorto;

                TextoBE lstPos7 = objDet.Textos.Find(X => X.CodTexto == "ZC07");
                if (lstPos7 == null)
                {
                    objDet.Textos.Add(txtZC07);
                }
                else
                {
                    lstPos7.CodTexto = "ZC07";
                    lstPos7.Descripcion = txtCAnioFabricacion.Text;
                    lstPos7.Posicion = objDet.PosicionCorto;
                }

                TextoBE txtZC09 = new TextoBE();
                txtZC09.CodTexto = "ZC09";
                txtZC09.Descripcion = txtCAnioModelo.Text;
                txtZC09.Posicion = objDet.PosicionCorto;
                TextoBE lstPos9 = objDet.Textos.Find(X => X.CodTexto == "ZC09");
                if (lstPos9 == null)
                {
                    objDet.Textos.Add(txtZC09);
                }
                else
                {
                    lstPos9.CodTexto = "ZC09";
                    lstPos9.Descripcion = txtCAnioModelo.Text;
                    lstPos9.Posicion = objDet.PosicionCorto;
                }
                pedido.Detalle = lstMat;
                Session["Pedido"] = pedido;
                txtCAnioFabricacion.Text = "";
                txtCAnioModelo.Text = "";
                this.mpeCaracteristica.Hide();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = "Ha ocurrido un error." + ex.Message;
                ((Site)Master).muestraMensajes();
            }
        }

        protected void cgvMateriales_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Caracteristica")
            {
                UsuarioWebBE objUsW = (UsuarioWebBE)Session["UsuarioWeb"];
                if (objUsW.sector == "01")
                {
                    int index = Convert.ToInt32(e.CommandArgument.ToString());

                    GridViewRow row = this.cgvMateriales.Rows[index];
                    LinkButton lb = (LinkButton)row.FindControl("lnkCodMaterial");
                    HiddenField hf = (HiddenField)row.FindControl("hidPosicion");
                    HiddenField lo = (HiddenField)row.FindControl("hidLote");
                    if (Session["IndReferencia"] == "S")
                    {
                        this.CargarCaracteristicas(lb.Text, hf.Value, lo.Value);
                    }
                    else
                    {
                        this.CargarCaracteristicas(lb.Text, hf.Value, "");
                    }
                }
            }
        }

        protected void txtCodEntFinanciera_TextChanged(object sender, EventArgs e)
        {
            try
            {
                //ClienteBE lstC = new ClienteBE();
                List<ClienteBE> lstC = new List<ClienteBE>();
                ClienteBE lstE = new ClienteBE();
                string strCodCli = txtCodEntFinanciera.Text.PadLeft(10, '0');
                if (!strCodCli.Equals("") && strCodCli != "0000000000")
                {
                    UsuarioWebBE uWeb = new UsuarioWebBE();
                    uWeb = (UsuarioWebBE)Session["UsuarioWeb"];

                    lstC = ClienteBC.Instance.buscarEntFin(strCodCli, "", uWeb);
                    //lstC = ClienteBC.Instance.leer(strCodCli, uWeb);
                    if (lstC == null || lstC.Count == 0)
                    {
                        txtCodEntFinanciera.Text = string.Empty;
                        txtNomEntFinanciera.Text = string.Empty;
                        throw new Exception("Código de cliente inválido.");
                    }
                    lstE = lstC.Find(X => X.Codigo == strCodCli);
                    //txtCodEntFinanciera.Text = lstC.Codigo;
                    //txtNomEntFinanciera.Text = lstC.Descripcion;
                    txtCodEntFinanciera.Text = lstE.Codigo;
                    txtNomEntFinanciera.Text = lstE.Descripcion;
                }
                else
                {
                    txtCodEntFinanciera.Text = string.Empty;
                    txtNomEntFinanciera.Text = string.Empty;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
                ((Site)Master).muestraMensajes();
            }
        }

        protected void btnCerrarCaracteristica_Click(object sender, ImageClickEventArgs e)
        {
            txtCAnioFabricacion.Text = "";
            txtCAnioModelo.Text = "";
        }

        /***CONFIGURACION PARA ANTICIPOS***/

        protected void cmbTipoDocumento_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.cargarPantallaAnticipo();
        }

        protected void textosVisibles()
        {
            if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("DocRepuestos"))
            {
                tpReferencia.Visible = false;
                tpObservaciones.Visible = false;
                tpGlosa.Visible = false;
                tpGerencia.Visible = true;
                tbAnticipo.Visible = false;
                tpAprob.Visible = false;
            }
            else if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("Anticipo"))
            {

                tpReferencia.Visible = false;
                tpObservaciones.Visible = false;
                tpGlosa.Visible = false;
                tpGerencia.Visible = false;
                tbAnticipo.Visible = true;
                tpAprob.Visible = false;
            }
            else if (cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("CotVMS"))
            {

                tpReferencia.Visible = true;
                tpObservaciones.Visible = true;
                tpGlosa.Visible = true;
                tpGerencia.Visible = false;
                tbAnticipo.Visible = false;
                tpAprob.Visible = true;
            }
        }

        protected void cargarPantallaAnticipo()
        {
            this.divCondicionPago.Visible = true;
            this.divFechaPedido.Visible = true;
            this.divFechaValidez.Visible = true;
            this.divMoneda.Visible = true;
            if (this.cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("DocRepuestos"))
            {
                this.divPedidoCliente.Visible = true;
            }
            else
            {
                this.divPedidoCliente.Visible = false;
            }
            this.divTipoCambio.Visible = true;

            if (this.cmbTipoDocumento.SelectedValue == ParametroBC.Instance.getParamValue("Anticipo"))
            {
                this.divCondicionPago.Visible = false;
                this.divFechaPedido.Visible = false;
                this.divFechaValidez.Visible = false;
                this.divPedidoCliente.Visible = false;
                this.tbAnticipo.Visible = true;
                this.tpAprob.Visible = false;
            }
        }

        protected void txtCodVendedor1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                List<GenericBE> lstC = new List<GenericBE>();
                string strCodCli = txtCodVendedor1.Text.PadLeft(8, '0');
                if (!strCodCli.Equals(""))
                {
                    UsuarioWebBE uWeb = new UsuarioWebBE();
                    uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                    DateTime fecha = DateTime.Now;
                    lstC = ClienteBC.Instance.buscaVendedor("", strCodCli, uWeb.OfVentas, fecha);
                    if (lstC == null || lstC.Count == 0)
                    {
                        txtCodVendedor1.Text = string.Empty;
                        txtNomVendedor1.Text = string.Empty;
                        throw new Exception("Código de vendedor inválido.");
                    }
                    GenericBE cli = lstC.Find(X => X.Codigo == strCodCli);
                    txtCodVendedor1.Text = cli.Codigo;
                    txtNomVendedor1.Text = cli.Descripcion;
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
                ((Site)Master).muestraMensajes();
            }
        }

        private Boolean valPobYReg()
        {
            Boolean val = true;
            try
            {
                if (ddlRegion.SelectedValue != null)
                {
                    val = false;
                }else if (ddlRegion.SelectedValue.Equals(""))
                {
                    val = false;
                }

                if (val)
                {
                    if (ddlPoblacion.SelectedValue != null)
                    {
                        val = false;
                    } if (ddlPoblacion.SelectedValue.Equals(""))
                    {
                        val = false;
                    }
                }
            }
            catch {
                val = false;
            }

            return val;
        }

        protected void btnClose_Click(object sender, ImageClickEventArgs e)
        {
            if (valPobYReg())
            {
                this.copiarClienteEventual();
                txtCodCliente.Text = txtCodSolicitante.Text;
                txtNomCliente.Text = txtNomSolicitante.Text;
                txtDirCliente.Text = txtDirSolicitante.Text;
                UsuarioWebBE uWeb = new UsuarioWebBE();
                uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
                if (uWeb.sector == "00")
                {
                    Session["RUCDNI"] = chkRucDNI.Checked == true ? "X" : "";
                }
            }
            else {
                Session["Mensaje"] = "Población y región obligatorios";
                ((Site)Master).muestraMensajes();
            }
        }


        /***agregado para impresion de ticket o anticipo***/

        protected void pagoControl_Aceptar(object sender, ImageClickEventArgs e)
        {
            this.lblImpresionDoc.Text = this.pagoControl.Mensaje;
            this.mpeImpresionDoc.Show();
            this.mpeMedioPago.Hide();
        }

        protected void btnImprimirDoc_Click(object sender, ImageClickEventArgs e)
        {
            string nroDocumento = this.pagoControl.NroPedido;

            if (this.pagoControl.TipoDocumento == "COTIZACION")
            {
                Session["NroPedido"] = nroDocumento;
                System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion",
                                "mostrarImpresionTicket();", true);
            }
            if (this.pagoControl.TipoDocumento == "ANTICIPO")
            {
                Session["NroFactura"] = nroDocumento;
                Session["NroFolio"] = this.pagoControl.NroFolio;
                System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion",
                                "mostrarImpresionAnticipo();", true);
            }
        }

        protected void btnCierreCaja_Click(object sender, ImageClickEventArgs e)
        {
            string tipo = "";
            UsuarioWebBE uWeb = new UsuarioWebBE();
            uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
            CierreBC.Instance.Get_TieneCierre(uWeb.vstel, DateTime.Now, out tipo);
            if (tipo.Equals("S"))
            {
                Session["Mensaje"] = "Ya existe cierre en el día";
                ((Site)Master).muestraMensajes();
            }
            else
            {
                string str = "<script type='text/javascript'>var win=window.open('CierreCaja.aspx?np=" + "" + "',null,'width=550,height=220,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "CIERRE CAJA", str, false);
            }
        }

        protected void btnRepCierreCaja_Click(object sender, ImageClickEventArgs e)
        {
            UsuarioWebBE uWeb = new UsuarioWebBE();
            List<ResumenVentaBE> p_tresumen = null;
            List<DetalleVentaBE> p_tdet = null;
            uWeb = (UsuarioWebBE)Session["UsuarioWeb"];
            CierreBC.Instance.Get_RepCierre(uWeb.sociedad, uWeb.vstel, DateTime.Now, uWeb.OfVentas, uWeb.Usuario,
                                            out p_tresumen, out p_tdet);
            Session["ResumenVenta"] = p_tresumen;
            Session["DetalleVenta"] = p_tdet;
            string str = "<script type='text/javascript'>var win=window.open('Impresion/ResumenVentaPopup.aspx?np=" + "" + "','Resumen','width=850,height=620,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Resumen cierre Caja", str, false);


        }

        protected void ibtnVisualizacionStock_Click(object sender, ImageClickEventArgs e)
        {
            GridViewVisualizacionStock.DataSource = null;
            mpeVisualizacionStock.Hide();
        }



        private string getIDPob(string reg, string pob)
        {
            List<PoblacionBE> lst = (List<PoblacionBE>)Session["lstPoblacion"];
            string id = "";
            for (int i = 0; i <= lst.Count - 1; i++)
            {
                if (lst[i].Region.Equals(reg))
                {
                    if (pob.Equals(lst[i].Descripcion) || pob.Equals(lst[i].Codigo))
                    {
                        id = lst[i].Codigo;
                        break;
                    }
                }
            }
            return id;
        }

        private List<GenericBE> getPobXreg(string reg)
        {
            List<PoblacionBE> lst = (List<PoblacionBE>) Session["lstPoblacion"];
            List<GenericBE> lstP = new List<GenericBE>();
            for(int  i = 0 ; i <= lst.Count-1; i++)
            {
                if(lst[i].Region.Equals(reg))
                {
                    GenericBE item = new GenericBE();
                    item.Codigo = lst[i].Codigo;
                    item.Descripcion = lst[i].Descripcion;
                    lstP.Add(item);
                }
            }
            return lstP;
        }
        
        protected void ddlRegion_TextChanged(object sender, EventArgs e)
        {
            ddlPoblacion.DataValueField = "Codigo";
            ddlPoblacion.DataTextField = "Descripcion";
            ddlPoblacion.DataSource = getPobXreg(ddlRegion.SelectedValue);
            ddlPoblacion.DataBind();      
        }

        protected void ddlRegion_SelectedIndexChanged1(object sender, EventArgs e)
        {
            Session["ddlPoblacion"] = "";
            ddlPoblacion.DataValueField = "Codigo";
            ddlPoblacion.DataTextField = "Descripcion";
            ddlPoblacion.DataSource = getPobXreg(ddlRegion.SelectedValue);
            ddlPoblacion.DataBind();

            mpeInterlocutores.Show();
        }

        protected void ddlPoblacion_SelectedIndexChanged1(object sender, EventArgs e)
        {

            Session["ddlPoblacion"] = ddlPoblacion.SelectedValue;
            mpeInterlocutores.Show();
        }
        //protected void btnImprimir_Click1(object sender, ImageClickEventArgs e)
        //{
        //    UsuarioWebBE objUsW = new UsuarioWebBE();
        //    objUsW = (UsuarioWebBE)Session["UsuarioWeb"];

        //    if (Session["remove"] == "ok")
        //    {
        //        if (objUsW.sector == "00")
        //        {
        //            Session["remove"] = "";
        //            rblTiposImpresion.Items.RemoveAt(2);
        //            rblTiposImpresion.Items.RemoveAt(1);
        //        }
        //        else
        //        {
        //            Session["remove"] = "";
        //            rblTiposImpresion.Items.RemoveAt(0);
        //        }
        //    }


        //    this.mpeImpresion.Show();
        //}

    }
}
